const util = require('util'); module.exports = function(client) { /* 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 * const dogapi = require("dogapi"); * const options = { * api_key: "api_key", * app_key: "app_key" * }; * dogapi.initialize(options); * const title = "some new event"; * const text = "IT HAPPENED!"; * dogapi.event.create(title, text, function(err, res){ * console.dir(res); * }); * title = "another event"; * text = "IT HAPPENED AGAIN!"; * const 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; const params = { body: properties }; 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 * const dogapi = require("dogapi"); * const 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 * const dogapi = require("dogapi"); * const options = { * api_key: "api_key", * app_key: "app_key" * }; * dogapi.initialize(options); * const now = parseInt(new Date().getTime() / 1000); * const then = now - 3600; // an hour ago * const 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 arguments[2] === 'function') { callback = parameters; parameters = {}; } if (typeof parameters !== 'object') { parameters = {}; } parameters.start = start; parameters.end = end; const params = { query: parameters }; client.request('GET', '/events', params, callback); } return { create, get, query, getUsage() { return [ ' dogapi event get ', ' dogapi event query [--priority ] [--sources ] [--tags ]', ' dogapi event create <text> [--time <timestamp>] [--priority <priority>] [--host <host>] [--tags <tags>] [--type <type>] [--agg-key <agg-key>] [--source <source>]' ]; }, getHelp() { 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(subcommand, args, callback) { if (subcommand === 'get' && args._.length > 4) { get(parseInt(args._[4]), callback); } else if (subcommand === 'query' && args._.length > 5) { const from = parseInt(args._[4]); const to = parseInt(args._[5]); const 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) { const title = args._[4]; const text = args._[5]; const 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 { return callback( 'unknown subcommand or arguments try `dogapi event --help` for help', false ); } } }; };