-
Notifications
You must be signed in to change notification settings - Fork 0
/
pingdom.coffee
95 lines (68 loc) · 3.48 KB
/
pingdom.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
http = require 'http'
url = require 'url'
request = require 'request'
qs = require 'querystring'
# new Pingdom(apiKey, username, password[, version='2.0'])
class Pingdom
constructor: (@apiKey, @username, @password, @version='2.0') ->
return new Pingdom(apiKey, username, password, version) unless this instanceof Pingdom
@checks = []
@baseUrl = "https://api.pingdom.com/api/#{@version}"
getCurrentServerTime: (err, dataCallback) ->
requestUrl = "#{@baseUrl}/servertime"
@apiCall requestUrl, dataCallback
# Memoized
# client.getCheckList([force=false,] dataCallback(checks))
getCheckList: (force, dataCallback) ->
if arguments.length == 1
dataCallback = force
force = false
return @checks unless force || @checks.length == 0
requestUrl = "#{@baseUrl}/checks"
@apiCall requestUrl, (err, checks) ->
@checks = checks
process.nextTick () -> dataCallback(err, checks) if dataCallback
getDetailedCheckInfo: (checkId, dataCallback) ->
requestUrl = "#{@baseUrl}/checks/#{checkId}"
@apiCall requestUrl, dataCallback
getSummaryAverage: (checkId, options, dataCallback) ->
# Name Description Type Req? Default
# from Start time of period. Format is UNIX timestamp Integer no 0
# to End time of period. Format is UNIX timestamp Integer no current time
# probes Filter to only use results from a list of probes. Format is a comma separated list of probe identifiers String no all probes
# includeuptime Include uptime information Boolean no false
# bycountry Split response times into country groups Boolean no false
# byprobe Split response times into probe groups Boolean no false
requestUrl = "#{@baseUrl}/summary.average/#{checkId}/?#{qs.stringify(options)}"
@apiCall requestUrl, dataCallback
# getSummaryHoursOfDay(checkId[, options], dataCallback)
getSummaryHoursOfDay: (checkId, options={}, dataCallback) ->
# Name Description
# from Start time of period. Format is UNIX timestamp Integer no One week earlier than "to"
# to End time of period. Format is UNIX timestamp Integer no Current time
# probes Filter to only use results from a list of probes. Format is a comma separated list of probe identifiers String no all probes
# uselocaltime If true, use the user's local time zone for results (from and to parameters should still be specified in UTC). If false, use UTC for results. Boolean no false */
#if !dataCallback
# dataCallback = options
# options = {}
requestUrl = "#{@baseUrl}/summary.hoursofday/#{checkId}/?#{qs.stringify(options)}"
@apiCall requestUrl, dataCallback
apiCall: (requestUrl, dataCallback) ->
@auth = 'Basic ' + new Buffer(@username + ':' + @password).toString('base64') unless @auth # Memoize the auth header
options =
uri: url.parse(requestUrl),
headers:
'App-Key': @apiKey,
'Authorization': @auth
req = request options, (error, response, body) ->
if error || response.statusCode != 200
process.nextTick () -> dataCallback error
else
data = JSON.parse response.body
if data.error
process.nextTick () -> dataCallback data.error
else
process.nextTick () -> dataCallback null, data
createClient = (apiKey, username, password, version) ->
new Pingdom(apiKey, username, password, version)
exports.createClient = createClient