| @ -0,0 +1,79 @@ | |||||
| #!/usr/bin/env node | |||||
| var dogapi = require("../"); | |||||
| var minimist = require("minimist"); | |||||
| var rc = require("rc"); | |||||
| var config = rc("dogapi", { | |||||
| api_key: null, | |||||
| app_key: null | |||||
| }); | |||||
| dogapi.initialize(config); | |||||
| var usage = [ | |||||
| "Usage:", | |||||
| " dogapi --help", | |||||
| " dogapi <command> --help", | |||||
| " dogapi --version", | |||||
| " dogapi now", | |||||
| " dogapi past <seconds-ago>", | |||||
| " dogapi future <seconds-ahead>" | |||||
| ]; | |||||
| var help = []; | |||||
| for(var key in dogapi){ | |||||
| if(!dogapi.hasOwnProperty(key)){ | |||||
| continue; | |||||
| } else if(!dogapi[key].hasOwnProperty("getUsage") || typeof dogapi[key].getUsage !== "function"){ | |||||
| continue; | |||||
| } else if(!dogapi[key].hasOwnProperty("handleCli") || typeof dogapi[key].handleCli !== "function"){ | |||||
| continue; | |||||
| } | |||||
| usage = usage.concat(dogapi[key].getUsage()); | |||||
| if(dogapi[key].hasOwnProperty("getHelp") && typeof dogapi[key].getHelp === "function"){ | |||||
| help = help.concat([""], dogapi[key].getHelp()); | |||||
| } | |||||
| } | |||||
| usage = usage.concat(help); | |||||
| usage = usage.join("\r\n"); | |||||
| var args = minimist(process.argv); | |||||
| var command = args._[2]; | |||||
| var subcommand = args._[3]; | |||||
| // this is the one unusual case | |||||
| if(command === "servicecheck"){ | |||||
| command = "serviceCheck"; | |||||
| } | |||||
| if(command === "now"){ | |||||
| console.log(dogapi.now()); | |||||
| } else if(command === "past" && args._.length > 3){ | |||||
| console.log(dogapi.now() - parseInt(args._[args._.length - 1])); | |||||
| } else if(command === "future" && args._.length > 3){ | |||||
| console.log(dogapi.now() + parseInt(args._[args._.length - 1])); | |||||
| } else if(dogapi.hasOwnProperty(command)){ | |||||
| if(subcommand){ | |||||
| dogapi[command].handleCli(subcommand, args, function(err, res){ | |||||
| if(err){ | |||||
| console.error(JSON.stringify(err, null, ' ')); | |||||
| process.exit(1); | |||||
| } else { | |||||
| if(res === ""){ | |||||
| res = "success"; | |||||
| } | |||||
| console.log(JSON.stringify(res, null, ' ')); | |||||
| } | |||||
| }); | |||||
| } else { | |||||
| var commandUsage = ["Usage:"].concat(dogapi[command].getUsage()); | |||||
| if(dogapi[command].hasOwnProperty("getHelp") && typeof dogapi[command].getHelp === "function"){ | |||||
| commandUsage = commandUsage.concat(["\r\n"], dogapi[command].getHelp()); | |||||
| } | |||||
| console.log(commandUsage.join("\r\n").replace(/\$\{command\}/g, " dogapi")); | |||||
| } | |||||
| } else if(args.version){ | |||||
| console.log(require("../package.json").version); | |||||
| } else { | |||||
| console.log(usage); | |||||
| } | |||||
| @ -0,0 +1,140 @@ | |||||
| var path = require("path"); | |||||
| var docast = require("docast"); | |||||
| var glob = require("glob"); | |||||
| var marked = require("marked"); | |||||
| var yaml = require("js-yaml"); | |||||
| marked.setOptions({ | |||||
| gfm: true, | |||||
| sanitize: true, | |||||
| pedantic: false | |||||
| }); | |||||
| var above = path.resolve(__dirname, "../lib/"); | |||||
| var match = above + "/**/*.js"; | |||||
| var docs = {}; | |||||
| glob(match, function(er, files){ | |||||
| files.forEach(function(file){ | |||||
| var comments = docast.parse(file); | |||||
| for(var i = 0; i < comments.length; ++i){ | |||||
| var comment = comments[i]; | |||||
| try{ | |||||
| comment.doc = yaml.safeLoad(comment.doc); | |||||
| if(!comment.doc.hasOwnProperty("section")){ | |||||
| continue; | |||||
| } | |||||
| if(!docs[comment.doc.section]){ | |||||
| docs[comment.doc.section] = {}; | |||||
| } | |||||
| for(var key in comment.doc.params){ | |||||
| if(comment.doc.params.hasOwnProperty(key)){ | |||||
| comment.doc.params[key] = comment.doc.params[key].replace(/optional/g, "_optional_"); | |||||
| comment.doc.params[key] = marked(comment.doc.params[key]); | |||||
| } | |||||
| } | |||||
| if(comment.doc.hasOwnProperty("example")){ | |||||
| comment.doc.example = marked(comment.doc.example); | |||||
| } else { | |||||
| comment.doc.example = ""; | |||||
| } | |||||
| if(comment.doc.hasOwnProperty("comment")){ | |||||
| comment.doc.comment = marked(comment.doc.comment); | |||||
| } else { | |||||
| comment.doc.comment = ""; | |||||
| } | |||||
| docs[comment.doc.section][comment.name] = comment.doc; | |||||
| } catch(e){} | |||||
| } | |||||
| }); | |||||
| var output = "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n"; | |||||
| output += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n"; | |||||
| output += "<script type=\"text/javascript\" src=\"//highlightjs.org/static/highlight.pack.js\">\n</script>\n<script type=\"text/javascript\">\ndocument.addEventListener(\"DOMContentLoaded\", function(){hljs.initHighlightingOnLoad();});</script>\n"; | |||||
| output += "<link rel=\"stylesheet\" href=\"//highlightjs.org/static/styles/github.css\" />\n"; | |||||
| output += "<link rel=\"stylesheet\" href=\"//getbootstrap.com/dist/css/bootstrap.min.css\" />\n"; | |||||
| output += "</head>\n<body>\n"; | |||||
| output += "<a class=\"btn btn-default\" href=\"#top\" style=\"position:fixed;bottom:1rem;right:1rem;z-index:100000;color:#000\">Jump To Top</a>\n"; | |||||
| output += "<div id=\"top\" class=\"container-fluid\">\n"; | |||||
| output += "<div class=\"row\">\n"; | |||||
| output += "<div class=\"col-sm-12\">\n"; | |||||
| output += "<h1>Node Dogapi</h1>\n"; | |||||
| output += "<ul class=\"nav nav-pills\">\n"; | |||||
| for(var section in docs){ | |||||
| if(!docs.hasOwnProperty(section)){ | |||||
| continue; | |||||
| } | |||||
| output += "<li role=\"\"><a href=\"#" + section + "\">" + section + "</a>\n"; | |||||
| output += "</li>\n"; | |||||
| } | |||||
| output += "</ul>\n</div>\n</div>\n"; | |||||
| for(var section in docs){ | |||||
| if(!docs.hasOwnProperty(section)){ | |||||
| continue; | |||||
| } | |||||
| methods = docs[section]; | |||||
| output += "<section id=\"" + section + "\" class=\"col-sm-12\">\n"; | |||||
| output += "<div class=\"row\">\n<h2 class=\"bg-primary\" style=\"text-indent:1rem\">" + section + "</h2></div>\n"; | |||||
| output += "<ul class=\"nav nav-pills\">\n"; | |||||
| for(var name in methods){ | |||||
| if(!methods.hasOwnProperty(name)){ | |||||
| continue; | |||||
| } | |||||
| output += "<li role\"presentation\"><a href=\"#" + section + "-" + name + "\">" + name + "</a></li>\n"; | |||||
| } | |||||
| output += "</ul>\n"; | |||||
| for(var name in methods){ | |||||
| if(!methods.hasOwnProperty(name)){ | |||||
| continue; | |||||
| } | |||||
| doc = methods[name]; | |||||
| var className = section + "-" + name; | |||||
| output += "<div class=\"function row\" id=\"" + className + "\">\n"; | |||||
| var definition = name + "("; | |||||
| if(doc.params && typeof doc.params === "object"){ | |||||
| definition += Object.keys(doc.params).join(", "); | |||||
| } | |||||
| definition += ")"; | |||||
| output += "<h3 class=\"bg-info\" style=\"text-indent:.5rem;padding:.5rem;margin-top:.5rem\">" + definition + "</h3>\n"; | |||||
| output += "<div class=\"col-md-6\">\n"; | |||||
| output += doc.comment; | |||||
| if(doc.params){ | |||||
| output += "<h4>Parameters:</h4>\n"; | |||||
| output += "<dl>\n"; | |||||
| for(var param in doc.params){ | |||||
| if(!doc.params.hasOwnProperty(param)){ | |||||
| continue; | |||||
| } | |||||
| var comment = doc.params[param]; | |||||
| output += "<dt>" + param + "</dt>\n"; | |||||
| output += "<dd>" + comment + "</dd>\n"; | |||||
| } | |||||
| output += "</dl>\n"; | |||||
| } | |||||
| output += "</div>\n"; | |||||
| output += "<div class=\"col-md-6\">\n"; | |||||
| output += doc.example; | |||||
| output += "</div>\n"; | |||||
| output += "</div>\n"; | |||||
| } | |||||
| output += "</section>\n"; | |||||
| } | |||||
| output += "</div>\n"; | |||||
| output += "<a href=\"https://github.com/brettlangdon/node-dogapi\"><img style=\"position: absolute; top: 0; right: 0; border: 0;\" src=\"https://camo.githubusercontent.com/a6677b08c955af8400f44c6298f40e7d19cc5b2d/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677261795f3664366436642e706e67\" alt=\"Fork me on GitHub\" data-canonical-src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png\"></a>"; | |||||
| output += "</body></html>"; | |||||
| console.log(output); | |||||
| }); | |||||
| @ -1,123 +0,0 @@ | |||||
| var util = require('util'); | |||||
| var alert_api = function(){}; | |||||
| alert_api.prototype.add_alert = function(alert, callback){ | |||||
| /* | |||||
| * alert_api.add_alert(alert, [callback]) | |||||
| * | |||||
| * add a new alert to datadog | |||||
| * | |||||
| * `alert` is an object containing: | |||||
| * query: *required*, the metric to query on | |||||
| * name: name of the alert | |||||
| * message: an optional message to include with the alert | |||||
| * silenced: whether the alert should notify by email and in the stream | |||||
| * | |||||
| * `callback` an optional function to get called with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof alert != 'object'){ | |||||
| throw new Error('`alert` parameter must be an object'); | |||||
| } | |||||
| if(!alert['query']){ | |||||
| throw new Error('`alert["query"]` is required'); | |||||
| } | |||||
| this.request('POST', '/alert', {body: alert}, callback); | |||||
| }; | |||||
| alert_api.prototype.update_alert = function(alert_id, alert, callback){ | |||||
| /* | |||||
| * alert_api.update_alert(alert_id, alert, [callback]) | |||||
| * | |||||
| * update an existing alert | |||||
| * | |||||
| * `alert_id` the id of alert to update | |||||
| * `alert` is an object containing: | |||||
| * query: *required*, the metric to query on | |||||
| * name: name of the alert | |||||
| * message: an optional message to include with the alert | |||||
| * silenced: whether the alert should notify by email and in the stream | |||||
| * | |||||
| * `callback` an optional function to get called with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof alert != 'object'){ | |||||
| throw new Error('`alert` parameter must be an object'); | |||||
| } | |||||
| if(!alert['query']){ | |||||
| throw new Error('`alert["query"]` is required'); | |||||
| } | |||||
| this.request('PUT', util.format('/alert/%s', alert_id), {body: alert}, callback); | |||||
| }; | |||||
| alert_api.prototype.get_alert = function(alert_id, callback){ | |||||
| /* | |||||
| * alert_api.get_alert(alert_id, [callback]) | |||||
| * | |||||
| * get the details of an alert from the given id | |||||
| * | |||||
| * `alert_id` the id for the alert to get | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('GET', util.format('/alert/%s', alert_id), callback); | |||||
| }; | |||||
| alert_api.prototype.delete_alert = function(alert_id, callback){ | |||||
| /* | |||||
| * alert_api.delete_alert(alert_id, [callback]) | |||||
| * | |||||
| * delete the given alert from datadog | |||||
| * | |||||
| * `alert_id` the id for the alert to get | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('DELETE', util.format('/alert/%s', alert_id), callback); | |||||
| }; | |||||
| alert_api.prototype.get_all_alerts = function(callback){ | |||||
| /* | |||||
| * alert_api.get_all_alerts([callback]) | |||||
| * | |||||
| * get the details of all alerts in datadog | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('GET', '/alert', callback); | |||||
| }; | |||||
| alert_api.prototype.mute_alerts = function(callback){ | |||||
| /* | |||||
| * alert_api.mute_alerts([callback]) | |||||
| * | |||||
| * mute all alerts | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('POST', '/mute_alerts', callback); | |||||
| }; | |||||
| alert_api.prototype.unmute_alerts = function(callback){ | |||||
| /* | |||||
| * alert_api.unmute_alerts([callback]) | |||||
| * | |||||
| * unmute all alerts | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('POST', '/unmute_alerts', callback); | |||||
| }; | |||||
| return module.exports = alert_api; | |||||
| @ -0,0 +1,157 @@ | |||||
| var client = require("../client"); | |||||
| var util = require("util"); | |||||
| /*section: comment | |||||
| *comment: create a new comment | |||||
| *params: | |||||
| * message: the message of the comment | |||||
| * properties: | | |||||
| * optional, an object containing any of the following | |||||
| * * handle: the handle to associate the comment with (e.g. "user@domain.com") | |||||
| * * related_event_id: the event to associate the comment with | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.comment.create("a comment message", function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function create(message, properties, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = properties; | |||||
| properties = {}; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| message: message | |||||
| } | |||||
| }; | |||||
| if(typeof properties === "object"){ | |||||
| if(properties.handle){ | |||||
| params.body.handle = properties.handle; | |||||
| } | |||||
| if(properties.related_event_id){ | |||||
| params.body.related_event_id = properties.related_event_id; | |||||
| } | |||||
| } | |||||
| client.request("POST", "/comments", params, callback); | |||||
| } | |||||
| /*section: comment | |||||
| *comment: update an existing comment | |||||
| *params: | |||||
| * commentId: the id of the comment to update | |||||
| * message: the message of the comment | |||||
| * handle: optional, the handle to associate the comment with (e.g. "user@domain.com") | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.comment.update(1234, "new message", function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function update(commentId, message, handle, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = handle; | |||||
| handle = undefined; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| message: message | |||||
| } | |||||
| }; | |||||
| if(handle){ | |||||
| params.body.handle = properties.handle; | |||||
| } | |||||
| client.request("PUT", util.format("/comments/%s", commentId), params, callback); | |||||
| } | |||||
| /*section: comment | |||||
| *comment: remove a comment | |||||
| *params: | |||||
| * commentId: the id of the comment to remove | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.comment.remove(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function remove(commentId, callback){ | |||||
| client.request("DELETE" ,util.format("/comments/%s", commentId), callback); | |||||
| } | |||||
| module.exports = { | |||||
| create: create, | |||||
| update: update, | |||||
| remove: remove, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi comment create <message> [--handle <handle>] [--event <event-id>]", | |||||
| " dogapi comment update <comment-id> <message> [--handle <handle>]", | |||||
| " dogapi comment remove <comment-id>" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Comment:", | |||||
| " Subcommands:", | |||||
| " create <message> add a new comment", | |||||
| " update <comment-id> <message> update an existing comment", | |||||
| " remove <comment-id> delete a comment", | |||||
| "", | |||||
| " Options:", | |||||
| " --handle <handle> the handle to associate with the comment (e.g. \"user@domain.com\")", | |||||
| " --event <event-id> related event id to associate the comment with" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "create"){ | |||||
| var message = args._[4]; | |||||
| var properties = {}; | |||||
| if(args["handle"]){ | |||||
| properties.handle = args["handle"]; | |||||
| } | |||||
| if(args["event"]){ | |||||
| properties.related_event_id = parseInt(args["event"]); | |||||
| } | |||||
| create(message, properties, callback); | |||||
| } else if(subcommand === "update"){ | |||||
| var commentId = args._[4]; | |||||
| var message = args._[5]; | |||||
| update(commentId, message, args["handle"], callback); | |||||
| } else if(subcommand === "remove"){ | |||||
| var commentId = args._[4]; | |||||
| remove(commentId, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi comment --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -1,103 +0,0 @@ | |||||
| var util = require('util'); | |||||
| var validate_dashboard = function(dashboard){ | |||||
| if(typeof dashboard != 'object'){ | |||||
| throw new Error('`dashboard` parameter must be an object'); | |||||
| } | |||||
| if(typeof dashboard['title'] != 'string'){ | |||||
| throw new Error('`dashboard["title"]` must be a string'); | |||||
| } | |||||
| if(typeof dashboard['description'] != 'string'){ | |||||
| throw new Error('`dashboard["description"]` must be a string'); | |||||
| } | |||||
| if(typeof dashboard['graphs'] != 'object'){ | |||||
| throw new Error('`dashboard["graphs"]` must be an array'); | |||||
| } | |||||
| for(var i in dashboard['graphs']){ | |||||
| if(!dashboard['graphs'][i]['title']){ | |||||
| throw new Error(util.format('`dashboard["graphs"][%s]["title"]` is missing', i)); | |||||
| } | |||||
| if(!dashboard['graphs'][i]['definition']){ | |||||
| throw new Error(util.format('`dashboard["graphs"][%s]["definition"]` is missing', i)); | |||||
| } | |||||
| } | |||||
| }; | |||||
| var dash_api = function(){}; | |||||
| dash_api.prototype.get_dashboard = function(dash_id, callback){ | |||||
| /* | |||||
| * dash_api.get_dashboard(dash_id, [callback]) | |||||
| * | |||||
| * method to get a single dashboard information | |||||
| * | |||||
| * `dash_id` is the id of the dashboard to get information for | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| this.request('GET', util.format('/dash/%s', dash_id), callback); | |||||
| }; | |||||
| dash_api.prototype.get_all_dashboards = function(callback){ | |||||
| /* | |||||
| * dash_api.get_all_dashboards([callback]) | |||||
| * | |||||
| * method to retrieve all dashboards in datadog | |||||
| * | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('GET', '/dash', callback); | |||||
| }; | |||||
| dash_api.prototype.create_dashboard = function(dashboard, callback){ | |||||
| /* | |||||
| * dash_api.create_dashboard(dashboard, [callback]) | |||||
| * | |||||
| * method used to create a new dashboard in datadog | |||||
| * | |||||
| * `dashboard` is the definition for the dashboard | |||||
| * please see (http://docs.datadoghq.com/api/) for more information | |||||
| * | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| validate_dashboard(dashboard); | |||||
| this.request('POST', '/dash', {body: dashboard}, callback); | |||||
| }; | |||||
| dash_api.prototype.update_dashboard = function(dash_id, dashboard, callback){ | |||||
| /* | |||||
| * dash_api.update_dashboard(dash_id, dashboard, [callback]) | |||||
| * | |||||
| * method used to update the dashboard with the provided `dash_id` | |||||
| * | |||||
| * `dash_id` the id of the dashboard to update | |||||
| * `dashboard` is a definition for the datadog dashboard | |||||
| * please see (http://docs.datadoghq.com/api/) for more information | |||||
| * | |||||
| * `callback` an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| validate_dashboard(dashboard); | |||||
| this.request('PUT', util.format('/dash/%s', dash_id), {body: dashbboard}, callback); | |||||
| }; | |||||
| dash_api.prototype.delete_dashboard = function(dash_id, callback){ | |||||
| /* | |||||
| * dash_api.delete_dashboard(dash_id, [callback]) | |||||
| * | |||||
| * method to remove a dashboard from datadog | |||||
| * | |||||
| * `dash_id` the id for the dashboard to remove | |||||
| * `callback` an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('DELETE', util.format('/dash/%s', dash_id), callback); | |||||
| }; | |||||
| return module.exports = dash_api; | |||||
| @ -1,102 +1,242 @@ | |||||
| var util = require('util'); | |||||
| var downtime_api = function(){}; | |||||
| downtime_api.prototype.schedule_downtime = function(scope, options, callback){ | |||||
| /* | |||||
| * downtime_api.schedule_downtime(scope, [options], [callback]) | |||||
| * | |||||
| * method to schedule a new downtime | |||||
| * | |||||
| * `scope` the scope to schedule downtime for | |||||
| * `options` optional `start` `end` and `message` paramaters | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| if(typeof scope !== 'string'){ | |||||
| throw new Error('scope parameter must be a string'); | |||||
| var client = require("../client"); | |||||
| var util = require("util"); | |||||
| /*section: downtime | |||||
| *comment: schedule a new downtime | |||||
| *params: | |||||
| * scope: string scope that the downtime should apply to (e.g. "env:staging") | |||||
| * properties: | | |||||
| * optional, an object containing any of the following | |||||
| * * start: POSIX timestamp for when the downtime should start | |||||
| * * end: POSIX timestamp for when the downtime should end | |||||
| * * message: a string message to accompany the downtime | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.downtime.create("env:staging", function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function create(scope, properties, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = properties; | |||||
| properties = {}; | |||||
| } | } | ||||
| if(typeof options === 'function'){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| var params = { | |||||
| body: { | |||||
| scope: scope | |||||
| } | |||||
| }; | |||||
| if(typeof properties === "object"){ | |||||
| if(properties.start){ | |||||
| params.body.start = parseInt(properties.start); | |||||
| } | |||||
| if(properties.end){ | |||||
| params.body.end = parseInt(properties.end); | |||||
| } | |||||
| if(properties.message){ | |||||
| params.body.message = properties.message; | |||||
| } | |||||
| } | } | ||||
| options.scope = scope; | |||||
| this.request('POST', '/downtime', {body: options}, callback); | |||||
| }; | |||||
| downtime_api.prototype.update_downtime = function(downtime_id, options, callback){ | |||||
| /* | |||||
| * downtime_api.update_downtime(downtime_id, [options], [callback]) | |||||
| * | |||||
| * method to update an existing downtime | |||||
| * | |||||
| * `downtime_id` the id of the downtime | |||||
| * `options` optional `scope` `start` `end` and `message` paramaters | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| if(typeof options === 'function'){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| client.request("POST", "/downtime", params, callback); | |||||
| } | |||||
| /*section: downtime | |||||
| *comment: update an existing downtime | |||||
| *params: | |||||
| * downtimeId: the id the downtie to update | |||||
| * properties: | | |||||
| * optional, an object containing any of the following | |||||
| * * scope: the scope the downtime should be changed to (e.g. "env:staging") | |||||
| * * start: POSIX timestamp for when the downtime should start | |||||
| * * end: POSIX timestamp for when the downtime should end | |||||
| * * message: a string message to accompany the downtime | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var properties = { | |||||
| * scope: "env:staging" | |||||
| * }; | |||||
| * dogapi.downtime.update(1234, properties, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function update(downtimeId, properties, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = properties; | |||||
| properties = {}; | |||||
| } | } | ||||
| this.request('PUT', util.format('/downtime/%s', downtime_id), {body: options}, callback); | |||||
| }; | |||||
| downtime_api.prototype.get_downtime = function(downtime_id, callback){ | |||||
| /* | |||||
| * downtime_api.get_downtime(downtime_id, [callback]) | |||||
| * | |||||
| * method to get an existing downtime | |||||
| * | |||||
| * `downtime_id` the id of the downtime | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| this.request('GET', util.format('/downtime/%s', downtime_id), callback); | |||||
| }; | |||||
| downtime_api.prototype.cancel_downtime = function(downtime_id, callback){ | |||||
| /* | |||||
| * downtime_api.cancel_downtime(downtime_id, [callback]) | |||||
| * | |||||
| * method to cancel an existing downtime | |||||
| * | |||||
| * `downtime_id` the id of the downtime | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| this.request('DELETE', util.format('/downtime/%s', downtime_id), callback); | |||||
| }; | |||||
| downtime_api.prototype.get_all_downtimes = function(current_only, callback){ | |||||
| /* | |||||
| * downtime_api.get_all_downtimes(downtime_id, [current_only], [callback]) | |||||
| * | |||||
| * method to get all downtimes | |||||
| * | |||||
| * `downtime_id` the id of the downtime | |||||
| * `current_only` whether or not to get the current downtime only | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| if(typeof current_only === 'function'){ | |||||
| callback = current_only; | |||||
| current_only = false; | |||||
| var params = { | |||||
| body: {} | |||||
| }; | |||||
| if(typeof properties === "object"){ | |||||
| if(properties.scope){ | |||||
| params.body.scope = properties.scope; | |||||
| } | |||||
| if(properties.start){ | |||||
| params.body.start = parseInt(properties.start); | |||||
| } | |||||
| if(properties.end){ | |||||
| params.body.end = parseInt(properties.end); | |||||
| } | |||||
| if(properties.message){ | |||||
| params.body.message = properties.message; | |||||
| } | |||||
| } | } | ||||
| query = {}; | |||||
| if(current_only){ | |||||
| query.current_only = true; | |||||
| client.request("PUT", util.format("/downtime/%s", downtimeId), params, callback); | |||||
| } | |||||
| /*section: downtime | |||||
| *comment: delete a scheduled downtime | |||||
| *params: | |||||
| * downtimeId: the id of the downtime | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.downtime.remove(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function remove(downtimeId, callback){ | |||||
| client.request("DELETE", util.format("/downtime/%s", downtimeId), callback); | |||||
| } | |||||
| /*section: downtime | |||||
| *comment: get a scheduled downtimes details | |||||
| *params: | |||||
| * downtimeId: the id of the downtime | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.downtime.get(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function get(downtimeId, callback){ | |||||
| client.request("GET", util.format("/downtime/%s", downtimeId), callback); | |||||
| } | |||||
| /*section: downtime | |||||
| *comment: get all downtimes details | |||||
| *params: | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.downtime.getAll(function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function getAll(callback){ | |||||
| client.request("GET", "/downtime", callback); | |||||
| } | |||||
| module.exports = { | |||||
| create: create, | |||||
| update: update, | |||||
| remove: remove, | |||||
| get: get, | |||||
| getAll: getAll, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi downtime create <scope> [--start <start>] [--end <end>] [--message <message>]", | |||||
| " dogapi downtime update <downtime-id> [--scope <scope>] [--start <start>] [--end <end>] [--message <message>]", | |||||
| " dogapi downtime remove <downtime-id>", | |||||
| " dogapi downtime get <downtime-id>", | |||||
| " dogapi downtime getall", | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Downtime:", | |||||
| " Subcommands:", | |||||
| " create <scope> create a new downtime with the provided scope (e.g. \"env:staging\")", | |||||
| " update <downtime-id> update an existing downtime with the provided id", | |||||
| " remove <downtime-id> remove the downtime with the provided id", | |||||
| " get <downtime-id> get the details of the downtime with the provided id", | |||||
| " getall get the details of all downtimes", | |||||
| "", | |||||
| " Options:", | |||||
| " --start <start> POSIX timestamp for when the downtime should start", | |||||
| " --end <end> POSIX timestamp for when the downtime should end", | |||||
| " --message <message> a string message to accompany the downtime", | |||||
| " --scope <scope> the scope of the downtime (e.g. \"env:staging\")" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "get"){ | |||||
| get(args._[4], callback); | |||||
| } else if(subcommand === "getall"){ | |||||
| getAll(callback); | |||||
| } else if(subcommand === "remove"){ | |||||
| remove(args._[4], callback); | |||||
| } else if(subcommand === "create"){ | |||||
| var scope = args._[4]; | |||||
| var properties = {}; | |||||
| if(args["start"]){ | |||||
| properties.start = parseInt(args["start"]); | |||||
| } | |||||
| if(args["end"]){ | |||||
| properties.end = parseInt(args["end"]); | |||||
| } | |||||
| if(args["message"]){ | |||||
| properties.message = args["message"]; | |||||
| } | |||||
| create(scope, properties, callback); | |||||
| } else if(subcommand === "update"){ | |||||
| var downtimeId = args._[4]; | |||||
| var properties = {}; | |||||
| if(args["scope"]){ | |||||
| properties.scope = args["scope"]; | |||||
| } | |||||
| if(args["start"]){ | |||||
| properties.start = parseInt(args["start"]); | |||||
| } | |||||
| if(args["end"]){ | |||||
| properties.end = parseInt(args["end"]); | |||||
| } | |||||
| if(args["message"]){ | |||||
| properties.message = args["message"]; | |||||
| } | |||||
| update(downtimeId, properties, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi downtime --help` for help", false); | |||||
| } | |||||
| } | } | ||||
| this.request('GET', '/downtime', {query: query}, callback); | |||||
| }; | }; | ||||
| return module.exports = downtime_api; | |||||
| @ -1,216 +1,209 @@ | |||||
| var extend = require('extend'); | |||||
| var util = require('util'); | |||||
| var event_api = function(){}; | |||||
| event_api.prototype.stream = function(start, end, filter, callback){ | |||||
| /* | |||||
| * event_api.stream( start, end, [[filter], callback] ) | |||||
| * | |||||
| * function used to retrieve all events that have occured between | |||||
| * `start` and `end` (POSIX timestamps) | |||||
| * | |||||
| * optionally filter the query with `filter`: | |||||
| * { | |||||
| * 'priority': ("low" or "normal"), | |||||
| * 'sources': ["sources", "as", "a", "list"], | |||||
| * 'tags': ["tags", "as", "a", "list"], | |||||
| * } | |||||
| * | |||||
| * optionally provide a `callback` function to get the result | |||||
| * of this api call: | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(arguments.length < 2){ | |||||
| throw new Error('parameters `start` and `end` are required'); | |||||
| } | |||||
| query = { | |||||
| start: parseInt(start), | |||||
| end: parseInt(end), | |||||
| var client = require("../client"); | |||||
| var util = require("util"); | |||||
| /*section: event | |||||
| *comment: | | |||||
| * create a new event | |||||
| *params: | |||||
| * title: the title of the event | |||||
| * text: the body of the event | |||||
| * properties: | | |||||
| * an optional object continaing any of the following additional optional properties | |||||
| * * date_happened: POSIX timestamp of when it happened | |||||
| * * priority: "normal" or "low" [defualt: "normal"] | |||||
| * * host: the host name to associate with the event | |||||
| * * tags: array of "tag:value"'s to associate with the event | |||||
| * * alert_type: "error", "warning", "info" or "success" [defualt: "info"] | |||||
| * * aggregation_key: an arbitrary string used to aggregate like events | |||||
| * * source_type_name: options: "nagios", "hudson", "jenkins", "user", "my apps", "feed", "chef", "puppet", "git", "bitbucket", "fabric", "capistrano" | |||||
| * callback: | | |||||
| * function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var title = "some new event"; | |||||
| * var text = "IT HAPPENED!"; | |||||
| * dogapi.event.create(title, text, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * title = "another event"; | |||||
| * text = "IT HAPPENED AGAIN!"; | |||||
| * var properties = { | |||||
| * tags: ["some:tag"], | |||||
| * alert_type: "error" | |||||
| * }; | |||||
| * dogapi.event.create(title, text, properties, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function create(title, text, properties, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = properties; | |||||
| properties = {}; | |||||
| } | |||||
| if(typeof properties !== "object"){ | |||||
| properties = {}; | |||||
| } | |||||
| properties.title = title; | |||||
| properties.text = text; | |||||
| var params = { | |||||
| body: properties | |||||
| }; | }; | ||||
| // this is the only case we have to check | |||||
| // if we have `event_api(1234, 5678, callback)` then | |||||
| // we want to push callback back | |||||
| if(arguments.length == 3 && typeof arguments[2] == 'function'){ | |||||
| callback = arguments[2]; | |||||
| filter = {}; | |||||
| } | |||||
| // validate the filters we were given and append to `query` | |||||
| // if they exist and meet their requirements | |||||
| if(filter['priority'] && ['low', 'normal'].indexOf(filter['priority'].toLowerCase()) >= 0){ | |||||
| query['priority'] = filter['priority'].toLowerCase(); | |||||
| } | |||||
| if(filter['sources'] && typeof filter['sources'] == 'object'){ | |||||
| query['sources'] = filter['sources'].join(); | |||||
| } | |||||
| if(filter['tags'] && typeof filter['tags'] == 'object'){ | |||||
| query['tags'] = filter['tags'].join(); | |||||
| } | |||||
| params = { | |||||
| query: query, | |||||
| client.request("POST", "/events", params, callback); | |||||
| } | |||||
| /*section: event | |||||
| *comment: | | |||||
| * get event details from the provided event id | |||||
| *params: | |||||
| * eventId: | | |||||
| * the id of the event to fetch | |||||
| * callback: | | |||||
| * function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.event.get(10005, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function get(eventId, callback){ | |||||
| client.request("GET", util.format("/events/%s", eventId), callback); | |||||
| } | |||||
| /*section: event | |||||
| *comment: | | |||||
| * query the event stream | |||||
| *params: | |||||
| * start: POSIX timestamp for start of query | |||||
| * end: POSIX timestamp for end of query | |||||
| * parameters: | | |||||
| * optional parameters to use for the query | |||||
| * * priority: "low" or "normal" | |||||
| * * sources: comma separated list of sources (e.g. "jenkins,user") | |||||
| * * tags: comma separated list of tags (e.g. "tag:value1,tag:value2") | |||||
| * callback: | | |||||
| * function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var now = parseInt(new Date().getTime() / 1000); | |||||
| * var then = now - 3600; // an hour ago | |||||
| * var parameters = { | |||||
| * tags: "some:tag", | |||||
| * sources: "jenkins" | |||||
| * }; | |||||
| * dogapi.event.query(then, now, parameters, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function query(start, end, parameters, callback){ | |||||
| if(arguments.length < 4 && typeof argument[2] === "function"){ | |||||
| callback = parameters; | |||||
| parameters = {}; | |||||
| } | |||||
| if(typeof parameters !== "object"){ | |||||
| parameters = {} | |||||
| } | |||||
| parameters.start = start; | |||||
| parameters.end = end; | |||||
| var params = { | |||||
| query: parameters | |||||
| }; | }; | ||||
| this.request('GET', '/events', params, callback); | |||||
| }; | |||||
| event_api.prototype.polling_stream = function(interval, filter, callback){ | |||||
| /* | |||||
| * event_api.polling_stream(interval, [[filter], callback] ) | |||||
| * | |||||
| * function used to continuously call `stream` for new events | |||||
| * | |||||
| * `interval` seconds between each call | |||||
| * `filter` is an object to limit the results by | |||||
| * `callback` is an optional function called with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(arguments.length < 3 && typeof arguments[1] == 'function'){ | |||||
| callback = arguments[1]; | |||||
| filter = {}; | |||||
| } | |||||
| if(typeof filter != 'object'){ | |||||
| throw new Error('`filter` parameter must be an object'); | |||||
| } | |||||
| var last_run = new Date().getTime() / 1000; | |||||
| var self = this; | |||||
| setInterval(function(){ | |||||
| var start = last_run; | |||||
| last_run = new Date().getTime() / 1000; | |||||
| self.stream(start, last_run, filter, callback); | |||||
| }, interval * 1000); | |||||
| }; | |||||
| event_api.prototype.get_event = function(event_id, callback){ | |||||
| /* | |||||
| * event_api.get_event(event_id, callback) | |||||
| * | |||||
| * method used to retrieve a single event's data | |||||
| * | |||||
| * `event_id` the id of the event to get the information for | |||||
| * `callback` an optional function called with the results | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(!event_id){ | |||||
| throw new Error('`event_id` parameter is required'); | |||||
| } | |||||
| this.request('GET', util.format('/events/%s', event_id), callback); | |||||
| }; | |||||
| event_api.prototype.add_event = function(event, callback){ | |||||
| /* | |||||
| * event_api.add_event(event, callback) | |||||
| * | |||||
| * method used to add a new event to datadog | |||||
| * | |||||
| * `event` is an object containing any of the following: | |||||
| * title: *required*, string, title for the new event | |||||
| * text: *required*, string, event message | |||||
| * date_happened: int, when the event occurred. if unset defaults to the current time. (POSIX timestamp) | |||||
| * handle: string, user to post the event as. defaults to owner of the application key used to submit. | |||||
| * priority: string, priority to post the event as. ("normal" or "low", defaults to "normal") | |||||
| * related_event_id: post event as a child of the given event | |||||
| * tags: array, tags to post the event with | |||||
| * host: string, host to post the event with | |||||
| * device_name: string, device_name to post the event with | |||||
| * aggregation_ket: string, key to aggregate this event on | |||||
| * | |||||
| * `callback` is an optional function for the result | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof event != 'object'){ | |||||
| throw new Error('`event` parameter must be an object'); | |||||
| } | |||||
| if(!event['title']){ | |||||
| throw new Error('`title` property of `event` parameter is required'); | |||||
| } | |||||
| if(!event['text']){ | |||||
| throw new Error('`text` property of `event` parameter is required'); | |||||
| } | |||||
| if(!event['date_happened']){ | |||||
| event['date_happened'] = Math.round((new Date()).getTime() / 1000); | |||||
| } | |||||
| if(event['priority']){ | |||||
| if(['normal', 'low'].indexOf(event['priority'].toLowerCase()) == -1){ | |||||
| event['priority'] = undefined; | |||||
| client.request("GET", "/events", params, callback); | |||||
| } | |||||
| module.exports = { | |||||
| create: create, | |||||
| get: get, | |||||
| query: query, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi event get <event-id>", | |||||
| " dogapi event query <from> <to> [--priority <priority>] [--sources <sources>] [--tags <tags>]", | |||||
| " dogapi event create <title> <text> [--time <timestamp>] [--priority <priority>] [--host <host>] [--tags <tags>] [--type <type>] [--agg-key <agg-key>] [--source <source>]" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Event:", | |||||
| " Subcommands:", | |||||
| " get <event-id> get the event with the provided <event-id>", | |||||
| " query <from> <to> query the event stream between <from> and <to> POSIX timestamps", | |||||
| " create <title> <text> create a new event with <title> and <text>", | |||||
| " Options:", | |||||
| " --priority <priority> the priority of the event \"normal\" or \"low\"", | |||||
| " --sources <sources> a comma separated list of sources (e.g. \"users,jenkins,chef\")", | |||||
| " --tags <tags> a comma separated list of \"tag:value\"'s", | |||||
| " --time <time> a POSIX timestamp for when the event happened", | |||||
| " --host <host> the host to associate the event to", | |||||
| " --type <type> the event type \"error\", \"warning\", \"info\" or \"success\"", | |||||
| " --agg-key <agg-key> an aggregation key to use to associate like events", | |||||
| " --source <source> the source to associate with this event (e.g. \"users\", \"jenkins\", etc)" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "get" && args._.length > 4){ | |||||
| get(parseInt(args._[4]), callback); | |||||
| } else if(subcommand === "query" && args._.length > 5){ | |||||
| var from = parseInt(args._[4]); | |||||
| var to = parseInt(args._[5]); | |||||
| var parameters = {}; | |||||
| if(args["sources"]){ | |||||
| parameters.sources = args["sources"]; | |||||
| } | |||||
| if(args["tags"]){ | |||||
| parameters.tags = args["tags"]; | |||||
| } | |||||
| query(from, to, parameters, callback); | |||||
| } else if(subcommand === "create" && args._.length > 5){ | |||||
| var title = args._[4]; | |||||
| var text = args._[5]; | |||||
| var properties = {}; | |||||
| if(args["priority"]){ | |||||
| properties.priority = args["priority"]; | |||||
| } | |||||
| if(args["host"]){ | |||||
| properties.host = args["host"]; | |||||
| } | |||||
| if(args["time"]){ | |||||
| properties.date_happened = parseInt(args["time"]); | |||||
| } | |||||
| if(args["tags"]){ | |||||
| properties.tags = args["tags"].split(","); | |||||
| } | |||||
| if(args["agg-key"]){ | |||||
| properties.aggregation_key = args["agg-key"]; | |||||
| } | |||||
| if(args["source"]){ | |||||
| properties.source_type_name = args["source"]; | |||||
| } | |||||
| create(title, text, properties, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi event --help` for help", false); | |||||
| } | } | ||||
| } | } | ||||
| if(event['tags']){ | |||||
| event['tags'] = event['tags'].join(); | |||||
| } | |||||
| this.request('POST', '/events', {body: event}, callback); | |||||
| }; | }; | ||||
| event_api.prototype.add_comment = function(comment, callback){ | |||||
| /* | |||||
| * event_api.add_comment(comment, [callback]) | |||||
| * | |||||
| * method used to add a new comment to datadog | |||||
| * | |||||
| * `comment` is a object representation of the new comment: | |||||
| * message: *require*, string, comment text body | |||||
| * handle: string, optional handle name to use instead of owner of the app key | |||||
| * related_event_id: string, optional event id to attach this comment to | |||||
| * | |||||
| * `callback` is an optional function for the result of the call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof comment != 'object'){ | |||||
| throw new Error('`comment` parameter must be an object'); | |||||
| } | |||||
| if(!comment['message']){ | |||||
| throw new Error('`message` property of `comment` paramter is required'); | |||||
| } | |||||
| this.request('POST', '/comments', {body: comment}, callback); | |||||
| }; | |||||
| event_api.prototype.update_comment = function(comment_id, comment, callback){ | |||||
| /* | |||||
| * event_api.update_comment(comment_id, comment, callback) | |||||
| * | |||||
| * method used to update a comment that already exists in datadog | |||||
| * | |||||
| * `comment_id` is the id of the comment to update | |||||
| * `comment` an object representation of the comment changes to make | |||||
| * message: string, the new message text for the comment | |||||
| * handle: string, the new owner of the comment | |||||
| * | |||||
| * `callback` an optional callback to call with the result | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof comment != 'object'){ | |||||
| throw new Error('`comment` parameter must be an object'); | |||||
| } | |||||
| this.request('PUT', util.format('/comments/%s', comment_id), {body: comment}, callback); | |||||
| }; | |||||
| event_api.prototype.delete_comment = function(comment_id, callback){ | |||||
| /* | |||||
| * event_api.delete_comment(comment_id, callback) | |||||
| * | |||||
| * method used to remove a comment from datadog | |||||
| * | |||||
| * `comment_id` the comment id for the comment to remove | |||||
| * `callback` an optional function to handle the result | |||||
| * callback(error, result, status_code) | |||||
| * | |||||
| */ | |||||
| this.request('DELETE', util.format('/comments/%s', comment_id), callback); | |||||
| }; | |||||
| return module.exports = event_api; | |||||
| @ -0,0 +1,73 @@ | |||||
| var client = require("../client"); | |||||
| /*section: graph | |||||
| *comment: take a snapshot of a metric query | |||||
| *params: | |||||
| * query: the metric query to use for the snapshot | |||||
| * from: POSIX timestamp for the beginning of the query | |||||
| * to: POSIX timestamp for the end of the query | |||||
| * eventQuery: optional, an event query to overlay event bands on the snapshot | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var query = "system.cpu.idle{*}"; | |||||
| * var to = dogapi.now(); | |||||
| * var from = from - 3600; // an hour ago | |||||
| * dogapi.graph.snapshot(query, from, to, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function snapshot(query, from, to, eventQuery, callback){ | |||||
| if(arguments.length < 5 && typeof arguments[3] === "function"){ | |||||
| callback = eventQuery; | |||||
| eventQuery = undefined; | |||||
| } | |||||
| var params = { | |||||
| query: { | |||||
| metric_query: query, | |||||
| start: parseInt(from), | |||||
| end: parseInt(to) | |||||
| } | |||||
| }; | |||||
| if(eventQuery){ | |||||
| params.query.event_query = eventQuery; | |||||
| } | |||||
| client.request("GET", "/graph/snapshot", params, callback); | |||||
| } | |||||
| module.exports = { | |||||
| snapshot: snapshot, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi graph snapshot <query> <from> <to> [--events <event-query>]" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Graph:", | |||||
| " Subcommands:", | |||||
| " snapshot <query> <from> <to> take a snapshot of a graph", | |||||
| " Options:", | |||||
| " --events <event-query> a query for event bands to add to the snapshot" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(args._.length > 5){ | |||||
| var query = args._[4]; | |||||
| var from = parseInt(args._[5]); | |||||
| var to = parseInt(args._[6]); | |||||
| var eventQuery = args["events"]; | |||||
| snapshot(query, from, to, eventQuery, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi graph --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -0,0 +1,112 @@ | |||||
| var client = require("../client"); | |||||
| /*section: host | |||||
| *comment: mute the given host, if it is not already muted | |||||
| *params: | |||||
| * hostname: the hostname of the host to mute | |||||
| * options: | | |||||
| * optional, an object containing any of the following | |||||
| * * end: POSIX timestamp for when the mute should end | |||||
| * * override: whether or not to override the end for an existing mute | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.host.mute("my.host.name", function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function mute(hostname, options, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| hostname: hostname | |||||
| } | |||||
| }; | |||||
| if(typeof options === "object"){ | |||||
| if(options.end){ | |||||
| params.body.end = parseInt(options.end); | |||||
| } | |||||
| if(options.override){ | |||||
| params.body.override = options.override; | |||||
| } | |||||
| } | |||||
| client.request("POST", "/host", params, callback); | |||||
| } | |||||
| /*section: host | |||||
| *comment: unmute the given host, if it is not already unmuted | |||||
| *params: | |||||
| * hostname: the hostname of the host to unmute | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.host.unmute("my.host.name", function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function unmute(hostname, callback){ | |||||
| var params = { | |||||
| body: { | |||||
| hostname: hostname | |||||
| } | |||||
| }; | |||||
| client.request("POST", "/host", params, callback); | |||||
| } | |||||
| module.exports = { | |||||
| mute: mute, | |||||
| unmute: unmute, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi host mute <host> [--end <end>] [--override]", | |||||
| " dogapi host unmute <host>" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Host:", | |||||
| " Subcommands:", | |||||
| " mute <host> mute the host with the provided hostname", | |||||
| " unmute <host> unmute the host with the provided hostname", | |||||
| "", | |||||
| " Options:", | |||||
| " --end <end> POSIX timestamp for when the mute should end", | |||||
| " --override override an existing \"end\" for a mute on a host" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "mute"){ | |||||
| var hostname = args._[4]; | |||||
| var options = {}; | |||||
| if(args["end"]){ | |||||
| options.end = parseInt(args["end"]); | |||||
| } | |||||
| if(args["override"]){ | |||||
| options.override = args["override"]; | |||||
| } | |||||
| mute(hostname, options, callback); | |||||
| } else if(subcommand === "unmute"){ | |||||
| var hostname = args._[4]; | |||||
| unmute(hostname, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi host --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -0,0 +1,21 @@ | |||||
| var api = { | |||||
| comment: require("./comment"), | |||||
| downtime: require("./downtime"), | |||||
| event: require("./event"), | |||||
| graph: require("./graph"), | |||||
| host: require("./host"), | |||||
| infrastructure: require("./infrastructure"), | |||||
| metric: require("./metric"), | |||||
| monitor: require("./monitor"), | |||||
| screenboard: require("./screenboard"), | |||||
| serviceCheck: require("./serviceCheck"), | |||||
| tag: require("./tag"), | |||||
| timeboard: require("./timeboard"), | |||||
| user: require("./user"), | |||||
| }; | |||||
| module.exports = function(obj){ | |||||
| for(key in api){ | |||||
| obj[key] = api[key]; | |||||
| } | |||||
| }; | |||||
| @ -0,0 +1,52 @@ | |||||
| var client = require("../client"); | |||||
| /*section: infrastructure | |||||
| *comment: | | |||||
| * search for metrics or hosts | |||||
| *params: | |||||
| * query: | | |||||
| * the query to use for search see [datadog docs](http://docs.datadoghq.com/api/#search) | |||||
| * for examples of the query (e.g. "hosts:database", "metrics:system" or "test") | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.infrastructure.search("hosts:database", function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function search(query, callback){ | |||||
| var params = { | |||||
| query: { | |||||
| q: query | |||||
| } | |||||
| }; | |||||
| client.request("GET", "/search", params, callback); | |||||
| } | |||||
| module.exports = { | |||||
| search: search, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi infrastructure search <query>" | |||||
| ] | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Infrastructure:", | |||||
| " Subcommands:", | |||||
| " search <query> query for hosts or metrics with <query> (see http://docs.datadoghq.com/api/#search)", | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| var query = args._[4]; | |||||
| search(query, callback); | |||||
| } | |||||
| }; | |||||
| @ -1,59 +1,187 @@ | |||||
| var metric_api = function(){}; | |||||
| var client = require("../client"); | |||||
| metric_api.prototype.add_metric = function(metric, callback){ | |||||
| /* | |||||
| * metric_api.add_metric(metric, [callback]) | |||||
| * | |||||
| * method used to add a single metric to datadog | |||||
| * | |||||
| * `metric` an object representation of the metric | |||||
| * metric: *required*, the name of the metric | |||||
| * points: *required*, an array of elements [ timestamp, value ] | |||||
| * host: name of the host that produced the event | |||||
| * tags: array of tags to associate with the event | |||||
| * type: "guage" or "counter" | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(metric, [callback]) | |||||
| */ | |||||
| var metrics = { | |||||
| 'series': [metric] | |||||
| }; | |||||
| this.add_metrics(metrics, callback); | |||||
| }; | |||||
| metric_api.prototype.add_metrics = function(metrics, callback){ | |||||
| /* | |||||
| * metric_api.add_metrics(metrics, [callback]) | |||||
| * | |||||
| * method used to add multiple metrics to datadog | |||||
| * | |||||
| * `metrics` an object representation of the metric: | |||||
| * series: an array of `metrics` to add | |||||
| * | |||||
| * `callback` an optional function to call with the results | |||||
| * callback(metric, [callback]) | |||||
| */ | |||||
| if(typeof metrics != 'object'){ | |||||
| throw new Error('`metrics` parameter must be an object'); | |||||
| /*section: metric | |||||
| *comment: | | |||||
| * submit a new metric | |||||
| *params: | |||||
| * metric: the metric name | |||||
| * points: | | |||||
| * single datapoint or array of [timestamp, datapoint], if a single point | |||||
| * is given "now" is used as the timestamp | |||||
| * extra: | | |||||
| * optional, object which can contain the following keys | |||||
| * * host: the host source of the metric | |||||
| * * tags: array of "tag:value"'s to use for the metric | |||||
| * * metric_type: which metric type to use ("gauge" or "counter") [default: gauge] | |||||
| * callback: | | |||||
| * function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.metric.send("my.metric", 1000, function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * var now = parseInt(new Date().getTime() / 1000); | |||||
| * dogapi.metric.send("my.metric", [now, 1000], function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function send(metric, points, extra, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = tags; | |||||
| extra = {}; | |||||
| } | } | ||||
| if(!metrics['series'] || typeof metrics['series'] != 'object'){ | |||||
| throw new Error('`metrics["series"]` parameter must be an array'); | |||||
| extra = extra || {}; | |||||
| var series = [ | |||||
| { | |||||
| metric: metric, | |||||
| points: points, | |||||
| host: extra.host, | |||||
| tags: extra.tags, | |||||
| metric_type: extra.metric_type | |||||
| } | |||||
| ]; | |||||
| send_all(series, callback); | |||||
| } | |||||
| /*section: metric | |||||
| *comment: | | |||||
| * send a list of metrics | |||||
| *params: | |||||
| * metrics: | | |||||
| * an array of metrics where each element is an object with the following keys | |||||
| * * metric: the name of the metric | |||||
| * * points: a single datapoint or an array of [timestamp, datapoint] (same as `dogapi.metric.send`) | |||||
| * * tags: an array of "tag:value"'s | |||||
| * * host: the source hostname to use for the metrics | |||||
| * * metric_type: the type of metric to use ("gauge" or "counter") [default: gauge] | |||||
| * callback: | | |||||
| * function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var now = parseInt(new Date().getTime() / 1000); | |||||
| * var metrics = [ | |||||
| * { | |||||
| * metric: "my.metric", | |||||
| * points: [now, 1000], | |||||
| * tags: ["tag:value"] | |||||
| * }, | |||||
| * { | |||||
| * metric: "another.metric", | |||||
| * points: 1000 | |||||
| * } | |||||
| * ]; | |||||
| * dogapi.metric.send_all(metrics, function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function send_all(metrics, callback){ | |||||
| var now = parseInt(new Date().getTime() / 1000); | |||||
| for(var i = 0; i < metrics.length; ++i){ | |||||
| if(!Array.isArray(metrics[i].points)){ | |||||
| metrics[i].points = [now, metrics[i].points]; | |||||
| } | |||||
| } | } | ||||
| var params = { | |||||
| body: metrics | |||||
| }; | |||||
| client.request("POST", "/series", params, callback); | |||||
| } | |||||
| for(var i in metrics['series']){ | |||||
| var metric = metrics['series'][i]; | |||||
| if(!metric['metric']){ | |||||
| throw new Error('metric["metric"] is required'); | |||||
| /*section: metric | |||||
| *comment: | | |||||
| * make a metric query | |||||
| *params: | |||||
| * from: POSIX timestamp for start of query | |||||
| * to: POSIX timestamp for end of query | |||||
| * query: the string query to perform (e.g. "system.cpu.idle{*}by{host}") | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var now = parseInt(new Date().getTime() / 1000); | |||||
| * var then = now - 3600; // one hour ago | |||||
| * var query = "system.cpu.idle{*}by{host}"; | |||||
| * dogapi.metric.query(then, now, query, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function query(from, to, query, callback){ | |||||
| var params = { | |||||
| query: { | |||||
| from: from, | |||||
| to: to, | |||||
| query: query | |||||
| } | } | ||||
| }; | |||||
| client.request("GET", "/query", params, callback); | |||||
| } | |||||
| if(!metric['points'] || typeof metric['points'] != 'object'){ | |||||
| throw new Error('metric["points"] must be an array'); | |||||
| module.exports = { | |||||
| send: send, | |||||
| send_all: send_all, | |||||
| query: query, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi metric send <metric> <point> [--tags <tags>] [--host <host>] [--type <type>]", | |||||
| " dogapi metric query <from> <to> <query>" | |||||
| ] | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Metric:", | |||||
| " Subcommands:", | |||||
| " send <metric> <point> add a new datapoint for <metric> for right now", | |||||
| " query <from> <to> <query> query for <query> between <from> and <to> POSIX timestamps", | |||||
| "", | |||||
| " Options:", | |||||
| " --tags <tags> a comma separated list of \"tag:value\"'s", | |||||
| " --host <host> the hostname that should be associated with this metric", | |||||
| " --type <type> the type of metric \"gauge\" or \"counter\"" | |||||
| ] | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "send"){ | |||||
| var extra = {}; | |||||
| if(args["--tags"]){ | |||||
| extra.tags = args["--tags"].split(","); | |||||
| } | |||||
| if(args["--host"]){ | |||||
| extra.host = args["--host"]; | |||||
| } | |||||
| if(args["--type"]){ | |||||
| extra.metric_type = args["--type"]; | |||||
| } | |||||
| send(args["<metric>"], args["<point>"], extra, callback); | |||||
| } else if(subcommand === "query" && args._.length > 6){ | |||||
| var from = parseInt(args._[4]); | |||||
| var to = parseInt(args._[5]); | |||||
| var q = args._[6]; | |||||
| query(from, to, q, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi metric --help` for help", false); | |||||
| } | } | ||||
| } | } | ||||
| this.request('POST', '/series', {body: metrics}, callback); | |||||
| }; | }; | ||||
| return module.exports = metric_api; | |||||
| @ -0,0 +1,438 @@ | |||||
| var client = require("../client"); | |||||
| var util = require("util"); | |||||
| /*section: monitor | |||||
| *comment: create a new monitor | |||||
| *params: | |||||
| * type: one of "metric alert" or "service check" | |||||
| * query: the monitor query to use, you probably want to read datadog's [monitor create](http://docs.datadoghq.com/api/#monitor-create) docs | |||||
| * properties: | | |||||
| * optional, an object containing any of the following | |||||
| * * name: the name of the monitor | |||||
| * * message: the message for the monitor | |||||
| * * options: an object, to see available options please see the [monitor create](http://docs.datadoghq.com/api/#monitor-create) docs | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var metricType = "metric alert"; | |||||
| * var query = "avg(last_1h):sum:system.net.bytes_rcvd{host:host0} > 100"; | |||||
| * dogapi.monitor.create(metricType, query, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function create(type, query, properties, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = properties; | |||||
| properties = {}; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| type: type, | |||||
| query: query | |||||
| } | |||||
| }; | |||||
| if(typeof properties === "object"){ | |||||
| if(properties.name){ | |||||
| params.body.name = properties.name; | |||||
| } | |||||
| if(properties.messsage){ | |||||
| params.body.message = properties.message; | |||||
| } | |||||
| if(typeof properties.options === "object"){ | |||||
| params.body.options = properties.options; | |||||
| } | |||||
| } | |||||
| client.request("POST", "/monitor", params, callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: get an existing monitor's details | |||||
| *params: | |||||
| * monitorId: the id of the monitor | |||||
| * groupStates: an array containing any of the following "all", "alert", "warn", or "no data" | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.get(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function get(monitorId, groupStates, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = groupStates; | |||||
| groupStates = undefined; | |||||
| } | |||||
| var params = {}; | |||||
| if(groupStates){ | |||||
| params.query = { | |||||
| group_states: groupStates.join(",") | |||||
| }; | |||||
| } | |||||
| client.request("GET", util.format("/monitor/%s", monitorId), params, callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: get all monitors | |||||
| *params: | |||||
| * options: | | |||||
| * optional, an object containing any of the following | |||||
| * * group_states: an array containing any of the following "all", "alert", "warn", or "no data" | |||||
| * * tags: an array of "tag:value"'s to filter on | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.getAll(function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function getAll(options, callback){ | |||||
| if(arguments.length < 2 && typeof arguments[0] === "function"){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| } | |||||
| var params = {}; | |||||
| if(typeof options === "object"){ | |||||
| params.query = {}; | |||||
| if(options.group_states){ | |||||
| params.query.group_states = options.group_states.join(","); | |||||
| } | |||||
| if(options.tags){ | |||||
| params.query.tags = options.tags.join(","); | |||||
| } | |||||
| } | |||||
| client.request("GET", "/monitor", params, callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: update a monitor's details | |||||
| *params: | |||||
| * monitorId: the id of the monitor to edit | |||||
| * query: the query that the monitor should have, see the [monitor create](http://docs.datadoghq.com/api/#monitor-create) docs for more info | |||||
| * properties: | | |||||
| * optional, an object containing any of the following | |||||
| * * name: the name of the monitor | |||||
| * * message: the message for the monitor | |||||
| * * options: an object, to see available options please see the [monitor create](http://docs.datadoghq.com/api/#monitor-create) docs | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var query = "avg(last_1h):sum:system.net.bytes_rcvd{host:host0} > 100"; | |||||
| * dogapi.monitor.update(1234, query, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function update(monitorId, query, properties, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = properties; | |||||
| properties = {}; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| query: query | |||||
| } | |||||
| }; | |||||
| if(typeof properties === "object"){ | |||||
| if(properties.name){ | |||||
| params.body.name = properties.name; | |||||
| } | |||||
| if(properties.messsage){ | |||||
| params.body.message = properties.message; | |||||
| } | |||||
| if(typeof properties.options === "object"){ | |||||
| params.body.options = properties.options; | |||||
| } | |||||
| } | |||||
| client.request("PUT", util.format("/monitor/%s", monitorId), params, callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: delete an existing monitor | |||||
| *params: | |||||
| * monitorId: the id of the monitor to remove | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.remove(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function remove(monitorId, callback){ | |||||
| client.request("DELETE", util.format("/monitor/%s", monitorId), callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: mute an existing monitor | |||||
| *params: | |||||
| * monitorId: the id of the monitor to mute | |||||
| * options: | | |||||
| * optional, an object containing any of the following | |||||
| * * scope: the scope to mute (e.g. "role:db") | |||||
| * * end: POSIX timestamp indicating when the mute should end | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.mute(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function mute(monitorId, options, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| } | |||||
| var params = {}; | |||||
| if(typeof options === "object"){ | |||||
| params.body = {}; | |||||
| if(options.scope){ | |||||
| params.body.scope = options.scope; | |||||
| } | |||||
| if(options.end){ | |||||
| params.body.end = parseInt(options.end); | |||||
| } | |||||
| } | |||||
| client.request("POST", util.format("/monitor/%s/mute"), params, callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: mute all monitors | |||||
| *params: | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.muteAll(function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function muteAll(callback){ | |||||
| client.request("POST", "/monitor/mute_all", callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: unmute an existing monitor | |||||
| *params: | |||||
| * monitorId: the id of the monitor to unmute | |||||
| * scope: optional, a scope to apply the unmute to (e.g. "role:db") | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.unmute(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function unmute(monitorId, scope, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = scope; | |||||
| scope = undefined; | |||||
| } | |||||
| var params = {}; | |||||
| if(scope){ | |||||
| params.body = { | |||||
| scope: scope | |||||
| }; | |||||
| } | |||||
| client.request("POST", util.format("/monitor/%s/unmute", monitorId), params, callback); | |||||
| } | |||||
| /*section: monitor | |||||
| *comment: unmute all monitors | |||||
| *params: | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.monitor.unmuteAll(function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function unmuteAll(callback){ | |||||
| client.request("POST", "/monitor/unmute_all", callback); | |||||
| } | |||||
| module.exports = { | |||||
| create: create, | |||||
| get: get, | |||||
| update: update, | |||||
| remove: remove, | |||||
| getAll: getAll, | |||||
| mute: mute, | |||||
| muteAll: muteAll, | |||||
| unmute: unmute, | |||||
| unmuteAll: unmuteAll, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi monitor create <type> <query> [--name <name>] [--message <message>]", | |||||
| " dogapi monitor get <monitor-id> [--states <states>]", | |||||
| " dogapi monitor getall [--states <states>] [--tags <tags>]", | |||||
| " dogapi monitor mute <monitor-id> [--scope <scope>] [--end <end>]", | |||||
| " dogapi monitor muteall", | |||||
| " dogapi monitor remove <monitor-id>", | |||||
| " dogapi monitor unmute <monitor-id> [--scope <scope>]", | |||||
| " dogapi monitor unmuteall", | |||||
| " dogapi monitor update <monitor-id> <query> [--name <name>] [--message <message>]" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Monitor:", | |||||
| " Subcommands:", | |||||
| " create <type> <query> create a new monitor", | |||||
| " get <monitor-id> get a monitors details", | |||||
| " getall get a list of all monitors", | |||||
| " mute <monitor-id> mute the monitor with the id <monitor-id>", | |||||
| " muteall mute all monitors", | |||||
| " remove <monitor-id> delete the monitor with the id <monitor-id>", | |||||
| " unmute <monitor-id> unmute the monitor with the id <monitor-id>", | |||||
| " unmuteall unmute all monitors", | |||||
| " update <monitor-id> <query> update an existing monitor", | |||||
| "", | |||||
| " Options:", | |||||
| " --states <states> a comma separated list containing any of \"all\", \"alert\", \"warn\", or \"no data\"", | |||||
| " --tags <tags> a comma separated list of \"tag:value\"'s", | |||||
| " --scope <scope> the scope of the monitor to mute (e.g. \"role:db\")", | |||||
| " --end <end> POSIX timestamp for when the mute should end", | |||||
| " --name <name> the name for the monitor", | |||||
| " --message <message> the message for the monitor" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| var states = []; | |||||
| if(args["states"]){ | |||||
| states = args["states"].split(","); | |||||
| } | |||||
| var tags = []; | |||||
| if(args["tags"]){ | |||||
| tags = args["tags"].split(","); | |||||
| } | |||||
| var name = args["name"]; | |||||
| var message = args["message"]; | |||||
| if(subcommand === "get"){ | |||||
| var monitorId = args._[4]; | |||||
| get(monitorId, states, callback); | |||||
| } else if(subcommand === "getall"){ | |||||
| var options = {}; | |||||
| if(states.length){ | |||||
| options.group_states = states; | |||||
| } | |||||
| if(tags.length){ | |||||
| options.tags = tags; | |||||
| } | |||||
| getAll(options, callback); | |||||
| } else if(subcommand === "mute"){ | |||||
| var monitorId = args._[4]; | |||||
| var options = {}; | |||||
| if(args["scope"]){ | |||||
| options.scope = args["scope"]; | |||||
| } | |||||
| if(args["end"]){ | |||||
| options.end = args["end"]; | |||||
| } | |||||
| mute(monitorId, options, callback); | |||||
| } else if(subcommand === "unmute"){ | |||||
| var monitorId = args._[4]; | |||||
| var scope = args["scope"]; | |||||
| unmute(monitorId, scope, callback); | |||||
| } else if(subcommand === "unmuteall"){ | |||||
| unmuteAll(callback); | |||||
| } else if(subcommand === "muteall"){ | |||||
| muteAll(callback); | |||||
| } else if(subcommand === "remove"){ | |||||
| var monitorId = args._[4]; | |||||
| remove(monitorId, callback); | |||||
| } else if(subcommand === "create" && args._.length > 5){ | |||||
| var type = args._[4]; | |||||
| var query = args._[5]; | |||||
| var properties = {}; | |||||
| if(name){ | |||||
| properties.name = name; | |||||
| } | |||||
| if(message){ | |||||
| properties.message = message; | |||||
| } | |||||
| create(type, query, properties, callback); | |||||
| } else if(subcommand === "update" && args._.length > 5){ | |||||
| var monitorId = args._[4]; | |||||
| var query = args._[5]; | |||||
| var properties = {}; | |||||
| if(name){ | |||||
| properties.name = name; | |||||
| } | |||||
| if(message){ | |||||
| properties.message = message; | |||||
| } | |||||
| update(monitorId, query, properties, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi monitor --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -1,116 +0,0 @@ | |||||
| var util = require('util'); | |||||
| var validate_screenboard = function(screenboard){ | |||||
| if(typeof screenboard != 'object'){ | |||||
| throw new Error('`screenboard` parameter must be an object'); | |||||
| } | |||||
| if(typeof screenboard['board_title'] != 'string'){ | |||||
| throw new Error('`screenboard["board_title"]` must be a string'); | |||||
| } | |||||
| if(screenboard['width'] != undefined && typeof screenboard['width'] != 'number'){ | |||||
| throw new Error('`screenboard["width"]` must be a number'); | |||||
| } | |||||
| if(screenboard['height'] != undefined && typeof screenboard['height'] != 'number'){ | |||||
| throw new Error('`screenboard["height"]` must be a number'); | |||||
| } | |||||
| if(typeof screenboard['widgets'] != 'object'){ | |||||
| throw new Error('`screenboard["widgets"]` must be an array'); | |||||
| } | |||||
| for(var i in screenboard['widgets']){ | |||||
| if(!screenboard['widgets'][i]['type']){ | |||||
| throw new Error(util.format('`screenboard["widgets"][%s]["type"]` is missing', i)); | |||||
| } | |||||
| if(!screenboard['widgets'][i]['width']){ | |||||
| throw new Error(util.format('`screenboard["widgets"][%s]["width"]` is missing', i)); | |||||
| } | |||||
| if(!screenboard['widgets'][i]['height']){ | |||||
| throw new Error(util.format('`screenboard["widgets"][%s]["height"]` is missing', i)); | |||||
| } | |||||
| if(!screenboard['widgets'][i]['x']){ | |||||
| throw new Error(util.format('`screenboard["widgets"][%s]["x"]` is missing', i)); | |||||
| } | |||||
| if(!screenboard['widgets'][i]['y']){ | |||||
| throw new Error(util.format('`screenboard["widgets"][%s]["y"]` is missing', i)); | |||||
| } | |||||
| } | |||||
| }; | |||||
| var screen_api = function(){}; | |||||
| screen_api.prototype.get_screenboard = function(screen_id, callback){ | |||||
| /* | |||||
| * screen_api.get_screenboard(screen_id, [callback]) | |||||
| * | |||||
| * method to get a single screenboard information | |||||
| * | |||||
| * `screen_id` is the id of the screenboard to get information for | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, results, status_code) | |||||
| */ | |||||
| this.request('GET', util.format('/screen/%s', screen_id), callback); | |||||
| }; | |||||
| screen_api.prototype.get_all_screenboards = function(callback){ | |||||
| /* | |||||
| * screen_api.get_all_screenboards([callback]) | |||||
| * | |||||
| * method to retrieve all screenboards in datadog | |||||
| * | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('GET', '/screen', callback); | |||||
| }; | |||||
| screen_api.prototype.create_screenboard = function(screenboard, callback){ | |||||
| /* | |||||
| * screen_api.create_screenboard(screenboard, [callback]) | |||||
| * | |||||
| * method used to create a new screenboard in datadog | |||||
| * | |||||
| * `screenboard` is the definition for the screenboard | |||||
| * please see (http://docs.datadoghq.com/api/) for more information | |||||
| * | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| validate_screenboard(screenboard); | |||||
| this.request('POST', '/screen', {body: screenboard}, callback); | |||||
| }; | |||||
| screen_api.prototype.update_screenboard = function(screen_id, screenboard, callback){ | |||||
| /* | |||||
| * screen_api.update_screenboard(screen_id, screenboard, [callback]) | |||||
| * | |||||
| * method used to update the screenboard with the provided `screen_id` | |||||
| * | |||||
| * `screen_id` the id of the screenboard to update | |||||
| * `screenboard` is a definition for the datadog screenboard | |||||
| * please see (http://docs.datadoghq.com/api/) for more information | |||||
| * | |||||
| * `callback` an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| validate_screenboard(screenboard); | |||||
| this.request('PUT', util.format('/screen/%s', screen_id), {body: screenboard}, callback); | |||||
| }; | |||||
| screen_api.prototype.delete_screenboard = function(screen_id, callback){ | |||||
| /* | |||||
| * screen_api.delete_screenboard(screen_id, [callback]) | |||||
| * | |||||
| * method to remove a screenboard from datadog | |||||
| * | |||||
| * `screen_id` the id for the screenboard to remove | |||||
| * `callback` an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('DELETE', util.format('/screen/%s', screen_id), callback); | |||||
| }; | |||||
| return module.exports = screen_api; | |||||
| @ -0,0 +1,239 @@ | |||||
| var client = require("../client"); | |||||
| var util = require("util"); | |||||
| /*section: screenboard | |||||
| *comment: create a new screenboard | |||||
| *params: | |||||
| * title: the name of the screenboard | |||||
| * description: description of the screenboard | |||||
| * graphs: | | |||||
| * an array of objects which required the following keys | |||||
| * * title: the name of the graph | |||||
| * * widgets: an array of widgets, see http://docs.datadoghq.com/api/screenboards/ for more info | |||||
| * options: | | |||||
| * optional, a object which can contain any of the following keys | |||||
| * * templateVariables: | | |||||
| * an array of objects with the following keys | |||||
| * * name: the name of the variable | |||||
| * * prefix: optional, the tag prefix for this variable | |||||
| * * default: optional, the default value for this tag | |||||
| * * width: the width of the screenboard in pixels | |||||
| * * height: the height of the screenboard in pixels | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var title = "my screenboard"; | |||||
| * var description = "it is super awesome"; | |||||
| * var graphs = [ | |||||
| * { | |||||
| * type: "image", | |||||
| * height: 20, | |||||
| * width: 32, | |||||
| * y: 7, | |||||
| * x: 32, | |||||
| * url: "https://path/to/image.jpg" | |||||
| * } | |||||
| * ]; | |||||
| * var options = { | |||||
| * templateVariables: [ | |||||
| * { | |||||
| * name: "host1", | |||||
| * prefix: "host", | |||||
| * "default": "host:my-host" | |||||
| * } | |||||
| * ] | |||||
| * }; | |||||
| * dogapi.screenboard.create( | |||||
| * title, description, graphs, options, | |||||
| * function(err, res){ | |||||
| * console.dir(res); | |||||
| * } | |||||
| * ); | |||||
| * ``` | |||||
| */ | |||||
| function create(title, description, graphs, options, callback){ | |||||
| if(arguments.length < 5 && typeof arguments[3] === "function"){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| } | |||||
| if(typeof options !== "object"){ | |||||
| options = {}; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| title: title, | |||||
| description: description, | |||||
| graphs: graphs | |||||
| } | |||||
| }; | |||||
| if(options.templateVariables){ | |||||
| params.body.template_variables = options.templateVariables; | |||||
| } | |||||
| if(options.width){ | |||||
| params.body.width = options.width; | |||||
| } | |||||
| if(options.height){ | |||||
| params.body.height = options.height; | |||||
| } | |||||
| client.request("POST", "/screen", params, callback); | |||||
| } | |||||
| /*section: screenboard | |||||
| *comment: delete an existing screenboard | |||||
| *params: | |||||
| * boardId: the id of the screenboard to delete | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.screenboard.remove(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function remove(boardId, callback){ | |||||
| client.request("DELETE", util.format("/screen/%s", boardId), callback); | |||||
| } | |||||
| /*section: screenboard | |||||
| *comment: get the info of a single existing screenboard | |||||
| *params: | |||||
| * boardId: the id of the screenboard to fetch | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.screenboard.get(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function get(boardId, callback){ | |||||
| client.request("GET", util.format("/screen/%s", boardId), callback); | |||||
| } | |||||
| /*section: screenboard | |||||
| *comment: get all existing screenboards | |||||
| *params: | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.screenboard.getAll(function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function getAll(callback){ | |||||
| client.request("GET", "/screen", callback); | |||||
| } | |||||
| /*section: screenboard | |||||
| *comment: share an existing screenboard | |||||
| *params: | |||||
| * boardId: the id of the screenboard to share | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.screenboard.share(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function share(boardId, callback){ | |||||
| client.request("GET", util.format("/screen/share/%s", boardId), callback); | |||||
| } | |||||
| module.exports = { | |||||
| create: create, | |||||
| remove: remove, | |||||
| get: get, | |||||
| getAll: getAll, | |||||
| share: share, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| "dogapi screenboard create <title> <description> <graphs> [--tmpvars <templateVariables>] [--width <width>] [--height <height>]", | |||||
| "dogapi screenboard remove <boardId>", | |||||
| "dogapi screenboard get <boardId>", | |||||
| "dogapi screenboard getall", | |||||
| "dogapi screenboard share <boardId>" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Screenboard:", | |||||
| " Subcommands:", | |||||
| " create <title> <description> <graphs> create a new screenboard, <graphs> is a json of the graph definition", | |||||
| " remove <boardId> remove an existing screenboard", | |||||
| " get <boardId> get an existing screenboard", | |||||
| " getall get all screenboards", | |||||
| " share <boardId> get share info for an existing screenboard", | |||||
| " Options:", | |||||
| " --tmpvars <templateVariables> json representation of the template variable definition", | |||||
| " --width <width> width of the screenboard in pixels", | |||||
| " --height <height> height of the screenboard in pixels", | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "get"){ | |||||
| get(args._[4], callback); | |||||
| } else if(subcommand === "getall"){ | |||||
| getAll(callback); | |||||
| } else if(subcommand === "remove"){ | |||||
| remove(args._[4], callback); | |||||
| } else if(subcommand === "share"){ | |||||
| share(args._[4], callback); | |||||
| } else if(subcommand === "create"){ | |||||
| var title = args._[4]; | |||||
| var description = args._[5]; | |||||
| var graphs = JSON.parse(args._[6]); | |||||
| var options = {}; | |||||
| if(args["tmpvars"]){ | |||||
| options.templateVariables = JSON.parse(args["tmpvars"]); | |||||
| } | |||||
| if(args["width"]){ | |||||
| options.width = parseInt(args["width"]); | |||||
| } | |||||
| if(args["height"]){ | |||||
| options.height = parseInt(args["height"]); | |||||
| } | |||||
| create(title, description, graphs, options, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi screenboard --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -1,16 +0,0 @@ | |||||
| var search_api = function(){}; | |||||
| search_api.prototype.search = function(query, callback){ | |||||
| /* | |||||
| * search_api.search(query, [callback]) | |||||
| * | |||||
| * method used to query the api for `metrics` or `hosts` | |||||
| * | |||||
| * `query` the query to use to search the datadog service | |||||
| * | |||||
| * `callback` an optional function called with the results of the search | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| this.request('GET', '/search', {query: {'q': query}}, callback); | |||||
| }; | |||||
| return module.exports = search_api; | |||||
| @ -0,0 +1,89 @@ | |||||
| var client = require("../client"); | |||||
| /*section: serviceCheck | |||||
| *comment: | | |||||
| * post an update to a service check | |||||
| *params: | |||||
| * check: the check name (e.g. "app.ok") | |||||
| * hostName: the name of the host submitting the check | |||||
| * status: one of `dogapi.OK`, `dogapi.WARNING`, `dogapi.CRITICAL` or `dogapi.UNKNOWN` | |||||
| * parameters: | | |||||
| * optional, an object containing any of the following | |||||
| * * timestamp: POSIX timestamp for when the check happened | |||||
| * * message: string message to accompany the check | |||||
| * * tags: an array of "tag:value"'s associated with the check | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var check = "app.ok"; | |||||
| * var hostName = "some.machine"; | |||||
| * dogapi.serviceCheck.check( | |||||
| * check, hostName, dogapi.WARNING, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function check(check, hostName, status, parameters, callback){ | |||||
| if(arguments.length < 5 && typeof arguments[3] === "function"){ | |||||
| callback = parameters; | |||||
| parameters = {}; | |||||
| } | |||||
| if(typeof parameters !== "object"){ | |||||
| parameters = {}; | |||||
| } | |||||
| parameters.check = check; | |||||
| parameters.host_name = hostName, | |||||
| parameters.status = status; | |||||
| var params = { | |||||
| body: parameters | |||||
| }; | |||||
| client.request("POST", "/check_run", params, callback); | |||||
| }; | |||||
| module.exports = { | |||||
| check: check, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi servicecheck check <check> <host> <status> [--time <timestamp>] [--message <message>] [--tags <tags>]" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Service Check:", | |||||
| " Subcommands:", | |||||
| " check <check> <host> <status> add a new service check for <check> and <host> at level <status> (0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN)", | |||||
| "", | |||||
| " Options:", | |||||
| " --time <timestamp> the POSIX timestamp to use for the check", | |||||
| " --message <message> an optional message to accompany the check", | |||||
| " --tags <tags> a comma separated list of \"tag:value\"'s for the check" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(args._.length > 6){ | |||||
| var parameters = {}; | |||||
| if(args["time"]){ | |||||
| parameters.time = parseInt(args["time"]); | |||||
| } | |||||
| if(args["message"]){ | |||||
| paramaters.message = args["message"]; | |||||
| } | |||||
| if(args["tags"]){ | |||||
| parameters.tags = args["tags"].split(","); | |||||
| } | |||||
| check(args._[4], args._[5], parseInt(args._[6]), parameters, callback); | |||||
| } else { | |||||
| callback("not enough arguments try `dogapi servicecheck --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -1,47 +0,0 @@ | |||||
| var util = require('util'); | |||||
| var constants = require('../constants'); | |||||
| var service_check_api = function(){}; | |||||
| service_check_api.prototype.service_check = function(status, check, host, extra, callback){ | |||||
| /* | |||||
| * service_check_api.service_check(options, callback]) | |||||
| * | |||||
| * used to post a service check | |||||
| * | |||||
| * `status` the `dogapi.constant.STATUSES` status code for the check | |||||
| * `check` the name of the check | |||||
| * `host` the host associated with the check | |||||
| * `extra` an object of optional arguments `timestamp`, `message` or `tags` | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof extra === 'function'){ | |||||
| callback = extra; | |||||
| extra = {}; | |||||
| } | |||||
| if(constants.ALL_STATUSES.indexOf(status) < 0){ | |||||
| throw new Error(util.format('Unknown service_check status %s', status)); | |||||
| } | |||||
| var body = { | |||||
| check: check, | |||||
| status: status, | |||||
| host_name: host, | |||||
| timestamp: parseInt(extra['timestamp'] || (new Date().getTime() / 1000)), | |||||
| }; | |||||
| if(extra['message']){ | |||||
| body['message'] = extra['message']; | |||||
| } | |||||
| if(extra['tags']){ | |||||
| body['tags'] = extra['tags']; | |||||
| } | |||||
| this.request('POST', '/check_run', {body: body}, callback); | |||||
| }; | |||||
| return module.exports = service_check_api; | |||||
| @ -1,101 +0,0 @@ | |||||
| var extend = require('extend'); | |||||
| var util = require('util'); | |||||
| var snapshot_api = function(){}; | |||||
| snapshot_api.prototype.add_snapshot = function(snapshot, callback){ | |||||
| /* | |||||
| * snapshot_api.add_snapshot(snapshot, [callback]) | |||||
| * | |||||
| * method used to add a new snapshot to datadog | |||||
| * | |||||
| * `snapshot` is an object containing any of the following: | |||||
| * metric_query: *required*, The metric query. | |||||
| * start: *required*, int, Start of the query.(POSIX timestamp) | |||||
| * end: *required*, int, End of the query.(POSIX timestamp) | |||||
| * event_query: A query that will add event bands to the graph. | |||||
| * | |||||
| * `callback` is an optional function for the result | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof snapshot != 'object'){ | |||||
| throw new Error('`snapshot` parameter must be an object'); | |||||
| } | |||||
| if(!snapshot['metric_query']){ | |||||
| throw new Error('`metric_query` property of `snapshot` parameter is required'); | |||||
| } | |||||
| if(!snapshot['start']){ | |||||
| throw new Error('`start` property of `snapshot` parameter is required'); | |||||
| } | |||||
| if(!snapshot['end']){ | |||||
| throw new Error('`end` property of `snapshot` parameter is required'); | |||||
| } | |||||
| this.request('GET', '/graph/snapshot', {query: snapshot}, callback); | |||||
| }; | |||||
| snapshot_api.prototype.add_snapshot_from_def = function(snapshot, callback){ | |||||
| /* | |||||
| * snapshot_api.add_snapshot_from_def(snapshot, [callback]) | |||||
| * | |||||
| * method used to add a new snapshot to datadog based on a graph definition | |||||
| * https://github.com/DataDog/dogapi/commit/583f13d7bd8de5a86daa2ff53f2d7cf6570e7ab2 | |||||
| * feature is not currently documented (at time of writing), but very useful. | |||||
| * | |||||
| * `snapshot` is an object containing any of the following: | |||||
| * graph_def: *required*, JSON string dump of an existing graph definition | |||||
| * start: *required*, int, Start of the query.(POSIX timestamp) | |||||
| * end: *required*, int, End of the query.(POSIX timestamp) | |||||
| * | |||||
| * `callback` is an optional function for the result | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof snapshot != 'object'){ | |||||
| throw new Error('`snapshot` parameter must be an object'); | |||||
| } | |||||
| if(!snapshot['graph_def']){ | |||||
| throw new Error('`graph_def` property of `snapshot` parameter is required'); | |||||
| } | |||||
| if(!snapshot['start']){ | |||||
| throw new Error('`start` property of `snapshot` parameter is required'); | |||||
| } | |||||
| if(!snapshot['end']){ | |||||
| throw new Error('`end` property of `snapshot` parameter is required'); | |||||
| } | |||||
| this.request('GET', '/graph/snapshot', {query: snapshot}, callback); | |||||
| }; | |||||
| snapshot_api.prototype.snapshot_status = function(snapshot_url, callback){ | |||||
| /* | |||||
| * snapshot_api.add_snapshot(snapshot_url, [callback]) | |||||
| * | |||||
| * method used to check the status of a datadog snapshot. | |||||
| * https://github.com/DataDog/dogapi/blob/master/src/dogapi/http/snapshot.py#L64 | |||||
| * Snapshot URLs are returned right away, but may be empty if the query or graph is complicated. | |||||
| * Result will be a json payload, with 403 for incomplete, or 200 for complete. | |||||
| * Examples: | |||||
| * * {"status_code":403} - incomplete (still processing, image is empty) | |||||
| * * {"status_code":200} - image is rendered and ready | |||||
| * | |||||
| * `snapshot_url` is a string containing URL returned from a call to add_snapshot or add_snapshot_from_def | |||||
| * | |||||
| * `callback` is an optional function for the result | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof snapshot_url != 'string'){ | |||||
| throw new Error('`snapshot_url` parameter must be a string'); | |||||
| } | |||||
| url = snapshot_url.split('/snapshot/view/')[1].split('.png')[0] | |||||
| this.request('GET', '/graph/snapshot_status/'+url, {}, callback); | |||||
| }; | |||||
| return module.exports = snapshot_api; | |||||
| @ -1,169 +1,264 @@ | |||||
| var client = require("../client"); | |||||
| var util = require('util'); | var util = require('util'); | ||||
| var tag_api = function(){}; | |||||
| tag_api.prototype.all_tags = function(source, callback){ | |||||
| /* | |||||
| * tag_api.all_tags([[source], callback]) | |||||
| * | |||||
| * method to get all the tags in datadog | |||||
| * | |||||
| * `source` a source to limit to | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(arguments.length < 2 && typeof arguments[0] == 'function'){ | |||||
| callback = arguments[0]; | |||||
| /*section: tag | |||||
| *comment: | | |||||
| * get all host tags | |||||
| *params: | |||||
| * source: | | |||||
| * optional, only show tags for a particular source [default: null] | |||||
| * callback: | | |||||
| * function callback(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.tag.getAll(function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function getAll(source, callback){ | |||||
| if(arguments.length < 2 && typeof arguments[0] === "function"){ | |||||
| callback = source; | |||||
| source = undefined; | source = undefined; | ||||
| } | } | ||||
| params = { | |||||
| var params = { | |||||
| query: { | query: { | ||||
| source: source | source: source | ||||
| } | } | ||||
| }; | }; | ||||
| this.request('GET', '/tags/hosts', params, callback); | |||||
| }; | |||||
| client.request("GET", "/tags/hosts", params, callback); | |||||
| } | |||||
| tag_api.prototype.host_tags = function(host, source, callback){ | |||||
| /* | |||||
| * tag_api.host_tags(host, [[source], callback]) | |||||
| * | |||||
| * method to get the tags associated with a given `host` | |||||
| * | |||||
| * `host` the hostname or id to get tags for | |||||
| * `source` a source to limit the results to | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(arguments.length < 3 && typeof arguments[1] == 'function'){ | |||||
| callback = arguments[1]; | |||||
| source = undefined; | |||||
| /*section: tag | |||||
| *comment: | | |||||
| * get the host tags for a provided host name or host id | |||||
| *params: | |||||
| * hostname: | | |||||
| * the hostname or host id | |||||
| * options: | |||||
| * | | |||||
| * optional, an object of options for the query allowing the following | |||||
| * * source: the source of the tags (e.g. chef, puppet, users, etc) [default: null] | |||||
| * * by_source: whether or not to group the results by source [default: false] | |||||
| * callback: | | |||||
| * function callback(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.tag.get("host.name", function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function get(hostname, options, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = options; | |||||
| options = {}; | |||||
| } | } | ||||
| options = options || {}; | |||||
| params = { | |||||
| var params = { | |||||
| query: { | query: { | ||||
| source: source, | |||||
| } | } | ||||
| }; | }; | ||||
| this.request('GET', util.format('/tags/hosts/%s', host), params, callback); | |||||
| }; | |||||
| tag_api.prototype.host_tags_by_source = function(host, source, callback){ | |||||
| /* | |||||
| * tag_api.host_tags_by_source(host, [[source], callback]) | |||||
| * | |||||
| * method to return the tags associated with a host, arranged by source | |||||
| * | |||||
| * `host` the hostname of id to get tags for | |||||
| * `source` a source to limit the lookup for | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(arguments.length < 3 && typeof arguments[1] == 'function'){ | |||||
| callback = arguments[1]; | |||||
| source = undefined; | |||||
| if(options.source){ | |||||
| params.query.source = options.source; | |||||
| } | } | ||||
| params = { | |||||
| query: { | |||||
| source: source, | |||||
| by_source: true, | |||||
| } | |||||
| }; | |||||
| this.request('GET', util.format('/tags/hosts/%s', host), params, callback); | |||||
| if(options.by_source){ | |||||
| params.query.by_source = options.by_source; | |||||
| } | |||||
| client.request("GET", "/tags/hosts/" + hostname, params, callback); | |||||
| }; | }; | ||||
| tag_api.prototype.add_tags = function(host, tags, source, callback){ | |||||
| /* | |||||
| * tag_api.add_tags(host, tags, [[source], callback]) | |||||
| * | |||||
| * add new tags to given `host` | |||||
| * | |||||
| * `host` the hostname or id of the machine to add tags for | |||||
| * `tags` an array of tags to add to the `host` | |||||
| * `source` the source to associate the tags with, default: user | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof tags != 'object'){ | |||||
| throw new Error('`tags` parameter must be an array'); | |||||
| } | |||||
| if(arguments.length < 4 && typeof arguments[2] == 'function'){ | |||||
| callback = arguments[2]; | |||||
| /*section: tag | |||||
| *comment: | | |||||
| * assign new host tags to the provided host name or host id | |||||
| *params: | |||||
| * hostname: | | |||||
| * the hostname or host id | |||||
| * tags: | | |||||
| * list of `<tag>:<value>` tags to assign to the server | |||||
| * source: | | |||||
| * optional, the source of the tags (e.g. chef, puppet, etc) [default: users] | |||||
| * callback: | | |||||
| * function callback(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.tag.create("host.name", ["role:webserver"], function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function create(hostname, tags, source, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = source; | |||||
| source = undefined; | source = undefined; | ||||
| } | } | ||||
| params = { | |||||
| query: { | |||||
| source: source, | |||||
| }, | |||||
| var params = { | |||||
| body: { | body: { | ||||
| tags: tags, | tags: tags, | ||||
| } | |||||
| source: source | |||||
| }, | |||||
| }; | }; | ||||
| this.request('POST', util.format('/tags/hosts/%s', host), params, callback); | |||||
| client.request("POST", "/tags/hosts/" + hostname, params, callback); | |||||
| }; | }; | ||||
| tag_api.prototype.update_tags = function(host, tags, source, callback){ | |||||
| /* | |||||
| * tag_api.update_tags(host, tags, [[source], callback]) | |||||
| * | |||||
| * update the tags associated with the given `host` | |||||
| * | |||||
| * `host` is the hostname or id of the machine to update tags for | |||||
| * `tags` an array of tags to associate with the `host` | |||||
| * `source` the source to associate the tags with, default: user | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(typeof tags != 'object'){ | |||||
| throw new Error('`tags` parameter must be an array'); | |||||
| } | |||||
| if(arguments.length < 4 && typeof arguments[2] == 'function'){ | |||||
| callback = arguments[2]; | |||||
| /*section: tag | |||||
| *comment: | | |||||
| * update the host tags for the provided host name or host id | |||||
| *params: | |||||
| * hostname: | | |||||
| * the hostname or host id | |||||
| * tags: | | |||||
| * list of `<tag>:<value>` tags to assign to the server | |||||
| * source: | | |||||
| * optional, the source of the tags (e.g. chef, puppet, etc) [default: users] | |||||
| * callback: | | |||||
| * function callback(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.tag.update("host.name", function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function update(hostname, tags, source, callback){ | |||||
| if(arguments.length < 4 && typeof arguments[2] === "function"){ | |||||
| callback = source; | |||||
| source = undefined; | source = undefined; | ||||
| } | } | ||||
| params = { | |||||
| query: { | |||||
| source: source, | |||||
| }, | |||||
| var params = { | |||||
| body: { | body: { | ||||
| tags: tags, | tags: tags, | ||||
| } | |||||
| source: source | |||||
| }, | |||||
| }; | }; | ||||
| this.request('PUT', util.format('/tags/hosts/%s', host), params, callback); | |||||
| client.request("PUT", "/tags/hosts/" + hostname, params, callback); | |||||
| }; | }; | ||||
| tag_api.prototype.detach_tags = function(host, source, callback){ | |||||
| /* | |||||
| * tag_api.detach_tags(host, [[source], callback]) | |||||
| * | |||||
| * method to remove tags for a given `host` | |||||
| * | |||||
| * `host` the hostname or id of the machine to remove the tags for | |||||
| * `source` the source of the tags | |||||
| * `callback` is an optional function to call with the results of the api call | |||||
| * callback(error, result, status_code) | |||||
| */ | |||||
| if(arguments.length < 3 && typeof arguments[1] == 'function'){ | |||||
| callback = arguments[1]; | |||||
| /*section: tag | |||||
| *comment: | | |||||
| * delete the host tags for the provided host name or host id | |||||
| *params: | |||||
| * hostname: | | |||||
| * the hostname or host id | |||||
| * source: | | |||||
| * optional, the source of the tags (e.g. chef, puppet, etc) [default: users] | |||||
| * callback: | | |||||
| * function callback(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.tag.remove("host.name", function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function remove(hostname, source, callback){ | |||||
| if(arguments.length < 3 && typeof arguments[1] === "function"){ | |||||
| callback = source; | |||||
| source = undefined; | source = undefined; | ||||
| } | } | ||||
| params = { | |||||
| var params = { | |||||
| query: { | query: { | ||||
| source: source, | |||||
| }, | |||||
| source: source | |||||
| } | |||||
| }; | }; | ||||
| this.request('DELETE', util.format('/tags/hosts/%s', host), params, callback); | |||||
| client.request("DELETE", "/tags/hosts/" + hostname, params, callback); | |||||
| }; | }; | ||||
| return module.exports = tag_api; | |||||
| module.exports = { | |||||
| _client: client, | |||||
| getAll: getAll, | |||||
| get: get, | |||||
| create: create, | |||||
| update: update, | |||||
| remove: remove, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi tag getall [--source <source>]", | |||||
| " dogapi tag get <host> [--source <source>] [--by-source]", | |||||
| " dogapi tag remove <host> [--source <source>]", | |||||
| " dogapi tag create <host> <tags> [--source <source>]", | |||||
| " dogapi tag update <host> <tags> [--source <source>]" | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Tag:", | |||||
| " Subcommands:", | |||||
| " getall get all tags", | |||||
| " get <host> get all tags for a given host", | |||||
| " remove <host> delete tags for a given host", | |||||
| " create <host> <tags> add the comma separates \"tag:value\"'s from <tag> to <host>", | |||||
| " update <host> <tags> update the comma separates \"tag:value\"'s from <tag> to <host>", | |||||
| "", | |||||
| " Options:", | |||||
| " --source <source> the source of the tags (e.g. \"chef\", \"user\", \"jenkins\", etc)", | |||||
| " --by-source whether the results should be grouped by source" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| var source = args["source"]; | |||||
| var host = args._[4]; | |||||
| if(subcommand === "getall"){ | |||||
| getAll(source, callback); | |||||
| } else if(subcommand === "get"){ | |||||
| var options = {}; | |||||
| if(source){ | |||||
| options.source = source; | |||||
| } | |||||
| if(args["by-source"]){ | |||||
| options.by_source = true; | |||||
| } | |||||
| get(host, options, callback); | |||||
| } else if(subcommand === "create"){ | |||||
| var tags = args._[5].split(","); | |||||
| create(host, tags, source, callback); | |||||
| } else if(subcommand === "update"){ | |||||
| var tags = args._[5].split(","); | |||||
| update(host, tags, source, callback); | |||||
| } else if(subcommand === "delete"){ | |||||
| remove(host, source, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi tag --help` for help", false); | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,274 @@ | |||||
| var client = require("../client"); | |||||
| var util = require("util"); | |||||
| /*section: timeboard | |||||
| *comment: add a new timeboard | |||||
| *params: | |||||
| * title: the title of the timeboard | |||||
| * description: the description of the timeboard | |||||
| * graphs: | | |||||
| * an array of objects with the following keys | |||||
| * * title: the name of the graph | |||||
| * * definition: an object containing the graph definition, e.g. `{"requests": [{"q": "system.cpu.idle{*} by {host}"}` | |||||
| * templateVariables: | | |||||
| * optional, an array of objects with the following keys | |||||
| * * name: the name of the variable | |||||
| * * prefix: optional, the tag prefix for this variable | |||||
| * * default: optional, the default value for this tag | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var title = "Time Keeps on Slipping"; | |||||
| * var description = "Into the Future"; | |||||
| * var graphs = [ | |||||
| * { | |||||
| * definition: { | |||||
| * events: [], | |||||
| * requests: [ | |||||
| * {q: "avg:system.mem.free{*}"} | |||||
| * ], | |||||
| * viz: "timeseries" | |||||
| * }, | |||||
| * title: "Average Memory Free" | |||||
| * } | |||||
| * ]; | |||||
| * var templateVariables = [ | |||||
| * { | |||||
| * name: "host1", | |||||
| * prefix: "host", | |||||
| * "default": "host:my-host" | |||||
| * } | |||||
| * ]; | |||||
| * dogapi.timeboard.create( | |||||
| * title, description, graphs, templateVariables, | |||||
| * function(err, res){ | |||||
| * console.dir(res); | |||||
| * } | |||||
| * ); | |||||
| * ``` | |||||
| */ | |||||
| function create(title, description, graphs, templateVariables, callback){ | |||||
| if(arguments.length < 5 && typeof arguments[3] === "function"){ | |||||
| callback = templateVariables; | |||||
| templateVariables = []; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| title: title, | |||||
| description: description, | |||||
| graphs: graphs | |||||
| } | |||||
| }; | |||||
| if(Array.isArray(templateVariables) && templateVariables.length){ | |||||
| params.body.template_variables = templateVariables; | |||||
| } | |||||
| client.request("POST", "/dash", params, callback); | |||||
| } | |||||
| /*section: timeboard | |||||
| *comment: update an existing timeboard | |||||
| *params: | |||||
| * dashId: the id of the timeboard to update | |||||
| * title: the title of the timeboard | |||||
| * description: the description of the timeboard | |||||
| * graphs: | | |||||
| * an array of objects with the following keys | |||||
| * * title: the name of the graph | |||||
| * * definition: an object containing the graph definition, e.g. `{"requests": [{"q": "system.cpu.idle{*} by {host}"}` | |||||
| * templateVariables: | | |||||
| * optional, an array of objects with the following keys | |||||
| * * name: the name of the variable | |||||
| * * prefix: optional, the tag prefix for this variable | |||||
| * * default: optional, the default value for this tag | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var title = "Time Keeps on Slipping"; | |||||
| * var description = "Into the Future"; | |||||
| * var graphs = [ | |||||
| * { | |||||
| * definition: { | |||||
| * events: [], | |||||
| * requests: [ | |||||
| * {q: "avg:system.mem.free{*}"} | |||||
| * ], | |||||
| * viz: "timeseries" | |||||
| * }, | |||||
| * title: "Average Memory Free" | |||||
| * } | |||||
| * ]; | |||||
| * var templateVariables = [ | |||||
| * { | |||||
| * name: "host1", | |||||
| * prefix: "host", | |||||
| * default: "host:my-host" | |||||
| * } | |||||
| * ]; | |||||
| * dogapi.timeboard.update( | |||||
| * 1234, title, description, graphs, templateVariables, | |||||
| * function(err, res){ | |||||
| * console.dir(res); | |||||
| * } | |||||
| * ); | |||||
| * ``` | |||||
| */ | |||||
| function update(dashId, title, description, graphs, templateVariables, callback){ | |||||
| if(arguments.length < 6 && typeof arguments[4] === "function"){ | |||||
| callback = templateVariables; | |||||
| templateVariables = []; | |||||
| } | |||||
| var params = { | |||||
| body: { | |||||
| title: title, | |||||
| description: description, | |||||
| graphs: graphs | |||||
| } | |||||
| }; | |||||
| if(Array.isArray(templateVariables) && templateVariables.length){ | |||||
| params.body.template_variables = templateVariables; | |||||
| } | |||||
| client.request("POST", util.format("/dash/%s", dashId), params, callback); | |||||
| } | |||||
| /*section: timeboard | |||||
| *comment: remove an existing timeboard | |||||
| *params: | |||||
| * dashId: the id of the timeboard to remove | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.timeboard.remove(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function remove(dashId, callback){ | |||||
| client.request("DELETE", util.format("/dash/%s", dashId), params, callback); | |||||
| } | |||||
| /*section: timeboard | |||||
| *comment: get all existing timeboards | |||||
| *params: | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.timeboard.getAll(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function getAll(callback){ | |||||
| client.request("GET", "/dash", params, callback); | |||||
| } | |||||
| /*section: timeboard | |||||
| *comment: get an existing timeboard | |||||
| *params: | |||||
| * dashId: the id of the timeboard to get | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.timeboard.get(1234, function(err, res){ | |||||
| * console.dir(res); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function get(dashId, callback){ | |||||
| client.request("GET", util.format("/dash/%s", dashId), params, callback); | |||||
| } | |||||
| module.exports = { | |||||
| create: create, | |||||
| update: update, | |||||
| remove: remove, | |||||
| getAll: getAll, | |||||
| get: get, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi timeboard get <dash-id>", | |||||
| " dogapi timeboard getall", | |||||
| " dogapi timeboard remove <dash-id>", | |||||
| " dogapi timeboard create <title> <description> <graphs> [--tmpvars <templateVariables>]", | |||||
| " dogapi timeboard update <dash-id> <title> <description> <graphs> [--tmpvars <templateVariables>]", | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "Timeboard:", | |||||
| " Subcommands:", | |||||
| " get <dash-id> get an existing timeboard", | |||||
| " getall get all existing timeboards", | |||||
| " remove <dash-id> remove an existing timeboard", | |||||
| " create <title> <description> <graphs> create a new timeboard, <graphs> is a json of the graphs definition", | |||||
| " update <dash-id> <title> <description> <graphs> update an existing timeboard, <graphs> is a json of the graphs definition", | |||||
| " Options:", | |||||
| " --tmpvars <templateVariables> a json representation of the template variables definition" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| if(subcommand === "get"){ | |||||
| get(args._[4], callback); | |||||
| } else if(subcommand === "getall"){ | |||||
| getAll(callback); | |||||
| } else if(subcommand === "remove"){ | |||||
| remove(args._[4], callback); | |||||
| } else if(subcommand === "create"){ | |||||
| var title = args._[4]; | |||||
| var description = args._[5]; | |||||
| var graphs = JSON.parse(args._[6]); | |||||
| var templateVariables = []; | |||||
| if(args["tmpvars"]){ | |||||
| templateVariables = JSON.parse(args["tmpvars"]); | |||||
| } | |||||
| create(title, description, graphs, templateVariables, callback); | |||||
| } else if(subcommand === "update"){ | |||||
| var dashId = parseInt(args._[4]); | |||||
| var title = args._[5]; | |||||
| var description = args._[6]; | |||||
| var graphs = JSON.parse(args._[7]); | |||||
| var templateVariables = []; | |||||
| if(args["tmpvars"]){ | |||||
| templateVariables = JSON.parse(args["tmpvars"]); | |||||
| } | |||||
| update(dashId, title, description, graphs, templateVariables, callback); | |||||
| } else { | |||||
| callback("unknown subcommand or arguments try `dogapi timeboard --help` for help", false); | |||||
| } | |||||
| } | |||||
| }; | |||||
| @ -0,0 +1,48 @@ | |||||
| var client = require("../client"); | |||||
| /*section: user | |||||
| *comment: invite users via e-mail | |||||
| *params: | |||||
| * emails: an array of email addresses to send invites to | |||||
| * callback: function(err, res) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * var emails = ["me@domain.com", "you@domain.com"]; | |||||
| * dogapi.user.invite(emails, fuction(err, res){ | |||||
| * console.dir(res): | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| function invite(emails, callback){ | |||||
| var params = { | |||||
| body: { | |||||
| emails: emails | |||||
| } | |||||
| }; | |||||
| client.request("POST", "/invite_users", params, callback); | |||||
| }; | |||||
| module.exports = { | |||||
| invite: invite, | |||||
| getUsage: function(){ | |||||
| return [ | |||||
| " dogapi user invite <address>..." | |||||
| ]; | |||||
| }, | |||||
| getHelp: function(){ | |||||
| return [ | |||||
| "User:", | |||||
| " Subcommands:", | |||||
| " invite <address>... invite the given list of e-mail addresses to your datadog org" | |||||
| ]; | |||||
| }, | |||||
| handleCli: function(subcommand, args, callback){ | |||||
| invite(args._.slice(4), callback) | |||||
| } | |||||
| }; | |||||
| @ -0,0 +1,122 @@ | |||||
| var extend = require("extend"); | |||||
| var https = require("https"); | |||||
| var url = require("url"); | |||||
| var util = require("util"); | |||||
| /*section: client | |||||
| *comment: | | |||||
| * the constructor for _client_ object | |||||
| *params: | |||||
| *example: | | |||||
| * See [client.request](#client-request) | |||||
| */ | |||||
| var client = function(){ | |||||
| this.api_key = null; | |||||
| this.app_key = null; | |||||
| this.api_version = "v1"; | |||||
| this.api_host = "app.datadoghq.com"; | |||||
| }; | |||||
| /*section: client | |||||
| *comment: | | |||||
| * used to make a raw request to the datadog api | |||||
| *params: | |||||
| * method: | | |||||
| * http method GET, POST, PUT, DELETE | |||||
| * path: | | |||||
| * the api url path e.g. /tags/hosts | |||||
| * params: | | |||||
| * an object which allows the keys `query` or `body` | |||||
| * callback: | | |||||
| * function to call on success/failure callback(err, result) | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "api_key", | |||||
| * app_key: "app_key" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.client.request("GET", "/url/path", {}, function(err, results){ | |||||
| * console.dir(results); | |||||
| * }); | |||||
| * ``` | |||||
| */ | |||||
| client.prototype.request = function(method, path, params, callback){ | |||||
| if(arguments.length === 3 && typeof arguments[2] === "function"){ | |||||
| callback = arguments[2]; | |||||
| params = {}; | |||||
| } | |||||
| params = params || {}; | |||||
| var body = (typeof params["body"] === "object")? JSON.stringify(params["body"]) : params["body"]; | |||||
| var query = { | |||||
| "api_key": this.api_key, | |||||
| "application_key": this.app_key, | |||||
| }; | |||||
| if(typeof params["query"] === "object"){ | |||||
| extend(query, params["query"]); | |||||
| } | |||||
| path = url.format({ | |||||
| "pathname": util.format("/api/%s%s", this.api_version, path), | |||||
| "query": query, | |||||
| }); | |||||
| var http_options = { | |||||
| hostname: this.api_host, | |||||
| port: 443, | |||||
| method: method.toUpperCase(), | |||||
| path: path, | |||||
| }; | |||||
| if(["POST", "PUT"].indexOf(http_options["method"]) >= 0){ | |||||
| http_options["headers"] = { | |||||
| "Content-Type": "application/json", | |||||
| "Content-Length": body.length, | |||||
| }; | |||||
| } | |||||
| var req = https.request(http_options, function(res){ | |||||
| res.on("error", function(err){ | |||||
| if(typeof callback == "function"){ | |||||
| callback(err, null, res.statusCode); | |||||
| } | |||||
| }); | |||||
| var data = ""; | |||||
| res.on("data", function(chunk){ | |||||
| data += chunk; | |||||
| }); | |||||
| res.on("end", function(){ | |||||
| var error = null; | |||||
| try{ data = JSON.parse(data); }catch(e){} | |||||
| if(data["errors"]){ | |||||
| error = data["errors"]; | |||||
| data = null; | |||||
| } | |||||
| if(typeof callback === "function"){ | |||||
| callback(error, data, res.statusCode); | |||||
| } | |||||
| }); | |||||
| }); | |||||
| // This should only occur for errors such as a socket hang up prior to any | |||||
| // data being received, or SSL-related issues. | |||||
| req.on("error", function(err){ | |||||
| if(typeof callback === "function"){ | |||||
| callback(err, null, 0); | |||||
| } | |||||
| }); | |||||
| if(["POST", "PUT"].indexOf(http_options["method"]) >= 0){ | |||||
| req.write(body); | |||||
| } | |||||
| req.end() | |||||
| }; | |||||
| module.exports = new client(); | |||||
| @ -1,145 +0,0 @@ | |||||
| var extend = require('extend'); | |||||
| var https = require('https'); | |||||
| var url = require('url'); | |||||
| var util = require('util'); | |||||
| var client = function(options){ | |||||
| /* | |||||
| * new http_client([options]) | |||||
| * | |||||
| * http client used to make requests to datadog api service | |||||
| * | |||||
| * `options` is an optional object of parameters to set: | |||||
| * { | |||||
| * 'api_key': 'datadog api key', | |||||
| * 'app_key': 'datadog app key', | |||||
| * 'api_version': 'default is v1', | |||||
| * 'api_host': 'default is app.datadoghq.com', | |||||
| * } | |||||
| * | |||||
| * this client also allows you to provide these options as | |||||
| * environment variables instead: | |||||
| * | |||||
| * api_key: DD_API_KEY | |||||
| * app_key: DD_APP_KEY | |||||
| * api_version: DD_API_VERSION | |||||
| * api_host: DD_API_HOST | |||||
| */ | |||||
| options = (options)? options : {}; | |||||
| this.api_key = (options['api_key'])? options['api_key'] : process.env['DD_API_KEY']; | |||||
| if(!this.api_key){ | |||||
| throw new Error('`api_key` is not present, either provide `api_key` in `options` or use environment variable `DD_API_KEY`'); | |||||
| } | |||||
| this.app_key = (options['app_key'])? options['app_key'] : process.env['DD_APP_KEY']; | |||||
| if(!this.api_key){ | |||||
| throw new Error('`app_key` is not present, either provide `app_key` in `options` or use environment variable `DD_APP_KEY`'); | |||||
| } | |||||
| this.api_version = (options['api_version'])? options['api_version'] : process.env['DD_API_VERSION']; | |||||
| if(!this.api_version){ | |||||
| this.api_version = 'v1'; | |||||
| } | |||||
| this.api_host = (options['api_host'])? options['api_host'] : process.env['DD_API_HOST']; | |||||
| if(!this.api_host){ | |||||
| this.api_host = 'app.datadoghq.com'; | |||||
| } | |||||
| }; | |||||
| client.prototype.request = function(method, path, params, callback){ | |||||
| /* | |||||
| * http_client.request(method, path, [[params], callback]) | |||||
| * | |||||
| * method used to send an http request to the datadog api service | |||||
| * | |||||
| * `method` is the http method to use ('POST', 'GET', 'DELETE', etc) | |||||
| * `path` the api url to call, e.g '/events', '/series', '/dash', etc | |||||
| * `params` an optional object of additional options: | |||||
| * { | |||||
| * 'query': { 'key': 'value' }, | |||||
| * 'body': { 'json/object': 'body' } or 'string body', | |||||
| * } | |||||
| * `callback` an optional function to obtain the results of the api call | |||||
| * callback(error, result) | |||||
| */ | |||||
| if(arguments.length == 3 && typeof arguments[2] == 'function'){ | |||||
| callback = arguments[2]; | |||||
| params = {}; | |||||
| } | |||||
| params = params || {}; | |||||
| var body = (typeof params['body'] == 'object')? JSON.stringify(params['body']) : params['body']; | |||||
| var query = { | |||||
| 'api_key': this.api_key, | |||||
| 'application_key': this.app_key, | |||||
| }; | |||||
| if(typeof params['query'] == 'object'){ | |||||
| extend(query, params['query']); | |||||
| } | |||||
| path = url.format({ | |||||
| 'pathname': util.format('/api/%s%s', this.api_version, path), | |||||
| 'query': query, | |||||
| }); | |||||
| var http_options = { | |||||
| hostname: this.api_host, | |||||
| port: 443, | |||||
| method: method.toUpperCase(), | |||||
| path: path, | |||||
| }; | |||||
| if(['POST', 'PUT'].indexOf(http_options['method']) >= 0){ | |||||
| http_options['headers'] = { | |||||
| 'Content-Type': 'application/json', | |||||
| 'Content-Length': body.length, | |||||
| }; | |||||
| } | |||||
| var req = https.request(http_options, function(res){ | |||||
| res.on('error', function(err){ | |||||
| if(typeof callback == 'function'){ | |||||
| callback(err, null, res.statusCode); | |||||
| } | |||||
| }); | |||||
| var data = ''; | |||||
| res.on('data', function(chunk){ | |||||
| data += chunk; | |||||
| }); | |||||
| res.on('end', function(){ | |||||
| var error = null; | |||||
| try{ data = JSON.parse(data); }catch(e){} | |||||
| if(data['errors']){ | |||||
| error = data['errors']; | |||||
| data = null; | |||||
| } | |||||
| if(typeof callback == 'function'){ | |||||
| callback(error, data, res.statusCode); | |||||
| } | |||||
| }); | |||||
| }); | |||||
| // This should only occur for errors such as a socket hang up prior to any | |||||
| // data being received, or SSL-related issues. | |||||
| req.on('error', function(err) { | |||||
| if(typeof callback == 'function'){ | |||||
| callback(err, null, 0); | |||||
| } | |||||
| }); | |||||
| if(['POST', 'PUT'].indexOf(http_options['method']) >= 0){ | |||||
| req.write(body); | |||||
| } | |||||
| req.end() | |||||
| }; | |||||
| return module.exports = client; | |||||
| @ -1,36 +1,55 @@ | |||||
| var extend = require('extend'); | |||||
| require("./api")(module.exports); | |||||
| var http_client = require('./http_client.js'); | |||||
| var constants = require('./constants.js'); | |||||
| var alert_api = require('./api/alert.js'); | |||||
| var dash_api = require('./api/dash.js'); | |||||
| var screen_api = require('./api/screen.js'); | |||||
| var event_api = require('./api/event.js'); | |||||
| var tag_api = require('./api/tag.js'); | |||||
| var metric_api = require('./api/metric.js'); | |||||
| var search_api = require('./api/search.js'); | |||||
| var service_check_api = require('./api/service_check.js'); | |||||
| var snapshot_api = require('./api/snapshot.js'); | |||||
| var downtime_api = require('./api/downtime.js'); | |||||
| var dogapi = function(options){ | |||||
| http_client.call(this, options); | |||||
| /*section: dogapi | |||||
| *comment: configure the dogapi client with your app/api keys | |||||
| *params: | |||||
| * options: | |||||
| * | | |||||
| * An object which allows you to override the default set parameters for interacting | |||||
| * with the datadog api. The available options are. | |||||
| * * api_key: your api key | |||||
| * * app_key: your app key | |||||
| * * api_version: the version of the api [default: `v1`] | |||||
| * * api_host: the host to call [default: `api.datadoghq.com`] | |||||
| *example: | |||||
| * | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * var options = { | |||||
| * api_key: "<API_KEY_HERE>", | |||||
| * app_key: "<APP_KEY_HERE>" | |||||
| * }; | |||||
| * dogapi.initialize(options); | |||||
| * dogapi.event.create(...); | |||||
| * ``` | |||||
| */ | |||||
| function initialize(options){ | |||||
| options = options || {}; | |||||
| for(var key in options){ | |||||
| if(module.exports.client.hasOwnProperty(key)){ | |||||
| module.exports.client[key] = options[key]; | |||||
| } | |||||
| } | |||||
| }; | }; | ||||
| extend(dogapi.prototype, | |||||
| http_client.prototype, | |||||
| alert_api.prototype, | |||||
| dash_api.prototype, | |||||
| screen_api.prototype, | |||||
| event_api.prototype, | |||||
| tag_api.prototype, | |||||
| metric_api.prototype, | |||||
| search_api.prototype, | |||||
| service_check_api.prototype, | |||||
| snapshot_api.prototype, | |||||
| downtime_api.prototype); | |||||
| dogapi.constants = constants; | |||||
| /*section: dogapi | |||||
| *comment: get the current POSIX timestamp | |||||
| *example: | | |||||
| * ```javascript | |||||
| * var dogapi = require("dogapi"); | |||||
| * dogapi.now(); | |||||
| * // this is the same as | |||||
| * parseInt(new Date().getTime() / 1000); | |||||
| * ``` | |||||
| */ | |||||
| function now(){ | |||||
| return parseInt(new Date().getTime() / 1000); | |||||
| }; | |||||
| return module.exports = dogapi; | |||||
| module.exports.client = require("./client"), | |||||
| module.exports.initialize = initialize; | |||||
| module.exports.now = now; | |||||
| module.exports.OK = 0; | |||||
| module.exports.WARNING = 1; | |||||
| module.exports.CRITICAL = 2; | |||||
| module.exports.UNKNOWN = 3; | |||||