pagerduty-sdk 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c566e34664d47191d4b62a94200716047dde2a7
4
- data.tar.gz: aa2b3c6ad33da171fcce26177f8fba1e304823de
3
+ metadata.gz: fb62479652d262b0920666828da1fcf7742dde8a
4
+ data.tar.gz: 4d3ce2efa6fcb9ac163af176f9d406fb1aa431b5
5
5
  SHA512:
6
- metadata.gz: e46045601e5253ca1bd77883d3b92e2080ad8e6d332c2d8bbdab8b146adb6d5b1a7a2a86c63975d5e3f7ad70dfea493faddeb76a0b0351d8f143278850e64acb
7
- data.tar.gz: 5ce61ddb93cd3ef5326bcbd273e1416755454bd6a115822b5d2443571025bb9d7f3062a0a02682ee2af2b105cf43a4f0fd553c335f4203a082bbaec219f861d3
6
+ metadata.gz: fc7611edc60bb045e1cc14599fc519565b45a05331ae6a0008b5bfdd20ecf197608e53283adc8cc2fae2a0ce7b6e2afc248496d2da2d6a6af46da26c70df2809
7
+ data.tar.gz: c44e5ff4d83db5e29cd8aedcb3462b05b90e122bd0b3fad820ca76715bf7c32d25f56c9b305a326d86f19e0f009a51c0225baeeae21b938f7c106f2d75b35d44
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  pagerduty-sdk
2
2
  =============
3
3
 
4
- pagerduty-sdk is a Ruby Gem for communicating with the
4
+ pagerduty-sdk is a Ruby Gem for communicating with the entire
5
5
  [Pagerduty](http://www.pagerduty.com) API. It was designed to be as
6
6
  fully object-oriented as possible. Although it is still under some
7
7
  construction, it is functional and ready for use.
@@ -9,160 +9,21 @@ construction, it is functional and ready for use.
9
9
  I plan to do much more work on this gem, and your feedback is greatly
10
10
  appreciated!
11
11
 
12
- 2013-10-31
13
- =============
14
-
15
- I have just pushed my first commit of this gem to Github. I will be
16
- refactoring a lot of the code (and completing the last couple of
17
- functions) as soon as I can. Since I haven't generated any documentation
18
- for the gem, please know that you can pass the parameters as expected by
19
- any of the API methods below to the functions I've listed at the end of
20
- this README.
21
-
22
- Example: If the `get_user` Users API method expects a user id, you would
23
- call the Pagerduty function as follows: `pagerduty.get_user(id:
24
- "#{USERID}")`
25
-
26
- This Gem is under construction!
27
-
28
- #### Alerts
29
- http://developer.pagerduty.com/documentation/rest/alerts
30
-
31
- #### Users
32
- http://developer.pagerduty.com/documentation/rest/users
33
-
34
- #### Incidents
35
- http://developer.pagerduty.com/documentation/rest/incidents
36
-
37
- #### Escalation Policies
38
- http://developer.pagerduty.com/documentation/rest/escalation_policies
39
-
40
- #### Escalation Rules
41
- http://developer.pagerduty.com/documentation/rest/escalation_policies/escalation_rules
42
-
43
- #### Log Entries
44
- http://developer.pagerduty.com/documentation/rest/log_entries
45
-
46
- #### Maintenance Windows
47
- http://developer.pagerduty.com/documentation/rest/maintenance_windows
48
-
49
- #### Reports
50
- http://developer.pagerduty.com/documentation/rest/reports
51
-
52
- #### Schedules
53
- http://developer.pagerduty.com/documentation/rest/schedules
54
- - [x] GET schedules List existing on-call schedules.
55
- - [x] GET schedules/:id Show detailed information about a schedule, including entries for each layer and sub-schedule.
56
- - [x] GET schedules/:id/users List all the users on-call in a given schedule for a given time range.
57
- - [ ] POST schedules Create a new on-call schedule.
58
- - [ ] PUT schedules/:id Update an existing on-call schedule.
59
- - [ ] POST schedules/preview Preview the configuration of an on-call schedule.
60
- - [ ] DELETE schedules/:id Delete an on-call schedule.
61
- - [ ] GET schedules/:id/entries List schedule entries that are active for a given time range for a specified on-call schedule.
62
-
63
- #### Services
64
- http://developer.pagerduty.com/documentation/rest/services
65
- - [x] GET services List existing services.
66
- - [x] GET services/:id Get details about an existing service.
67
- - [x] POST services Create a new service.
68
- - [ ] PUT services/:id Update an existing service.
69
- - [ ] DELETE services/:id Delete an existing service. Once the service is deleted, it will not be accessible from the web UI and new incidents won't be able to be created for this service.
70
- - [ ] PUT services/:id/disable Disable a service. Once a service is disabled, it will not be able to create incidents until it is enabled again.
71
- - [ ] PUT services/:id/enable Enable a previously disabled service.
72
- - [ ] POST services/:id/regenerate_key Regenerate a new service key for an existing service.
73
-
74
-
12
+ ## Requirements
13
+ * Ruby 1.9.3+
14
+ * A Pagerduty account token
75
15
 
76
16
  ## Installation
77
-
78
17
  ```
79
18
  gem install pagerduty-sdk
80
19
  ```
81
20
 
82
-
83
21
  ## Usage
84
-
85
- Example of getting all incidents within the past 24 hours:
86
-
87
22
  ```ruby
88
23
  require 'pagerduty'
89
24
 
90
25
  pagerduty = Pagerduty.new(token: "#{token}", subdomain: "#{subdomain}")
91
26
  #<Pagerduty:0x007f9a340fc410>
92
-
93
- pagerduty.incidents
94
-
95
- [<Pagerduty::Incident
96
- id=
97
- incident_number=
98
- created_on=
99
- status=
100
- html_url=
101
- incident_key=
102
- service=#<Service:0x007f9a35106dd8 @id="", @name="", @html_url="", @delete_at=nil>
103
- escalation_policy=#<EscalationPolicy:0x007f9a35105168 @id="", @name="", @description=nil, @escalation_rules=[], @services=#<Set: {}>, @num_loops=nil>
104
- assigned_to_user=nil
105
- trigger_summary_data=#<TriggerSummaryData:0x007f9a3510d6d8 @subject="">
106
- trigger_details_html_url=""
107
- trigger_type=""
108
- last_status_change_on=""
109
- last_status_change_by=#<LastStatusChangeBy:0x007f9a3510c440 @id="", @name="", @email="", @html_url="">
110
- number_of_escalations=0
111
- resolved_by_user=#<ResolvedByUser:0x007f9a3511cd90 @id="", @name="", @email="", @html_url="">
112
- >]
113
- ```
114
-
115
- You can filter the incidents returned by their status (triggered,
116
- acknowledged, resolved) by using the accessor method on the array of
117
- incidents (`pagerduty.incidents.triggered`)
118
-
119
- You can acknowledge or resolve an incident easily by calling the
120
- `acknowledge` or `resolve` methods of the `Pagerduty::Incident` object
121
-
122
- You can also reassign the incident to another user by calling the
123
- `reassign` method. This method takes accepts a hash with the expected
124
- API parameters which you can see from the Pagerduty documentation link
125
- above.
126
-
127
-
128
- Here's a list of other supported functions (until I have the full
129
- documentation up)
130
-
131
- ```
132
- > pagerduty.interesting_methods
133
- [
134
- [ 0] :alerts,
135
- [ 1] :alerts_per_time,
136
- [ 2] :create_escalation_policy,
137
- [ 3] :create_maintenance_window,
138
- [ 4] :create_service,
139
- [ 5] :create_user,
140
- [ 6] :curl,
141
- [ 7] :escalation_policies,
142
- [ 8] :escalation_rules,
143
- [ 9] :get_escalation_policy,
144
- [10] :get_escalation_rule,
145
- [11] :get_incident,
146
- [12] :get_incident_counts,
147
- [13] :get_log_entries,
148
- [14] :get_log_entry,
149
- [15] :get_maintenance_window,
150
- [16] :get_maintenance_windows,
151
- [17] :get_schedule,
152
- [18] :get_schedule_users,
153
- [19] :get_schedules,
154
- [20] :get_service,
155
- [21] :get_services,
156
- [22] :get_user,
157
- [23] :get_users,
158
- [24] :has_requirements?,
159
- [25] :incidents,
160
- [26] :incidents_per_time,
161
- [27] :notes,
162
- [28] :subdomain,
163
- [29] :token
164
- ]
165
27
  ```
166
28
 
167
-
168
-
29
+ See [YARD documentation](http://rubydoc.info/gems/pagerduty-sdk/1.0.2/frames) for specific function usage.
@@ -8,8 +8,11 @@ require 'net/https'
8
8
  require 'uri'
9
9
  require 'virtus'
10
10
 
11
+ # Core
11
12
  require 'pagerduty/core'
12
13
  require 'pagerduty/pagerduty'
14
+
15
+ # Models
13
16
  require 'pagerduty/models/report'
14
17
  require 'pagerduty/models/agent'
15
18
  require 'pagerduty/models/assigneduser'
@@ -25,7 +28,13 @@ require 'pagerduty/models/notification'
25
28
  require 'pagerduty/models/log_entry'
26
29
  require 'pagerduty/models/channels'
27
30
  require 'pagerduty/models/alert'
31
+ require 'pagerduty/models/alerts'
28
32
  require 'pagerduty/models/note'
33
+ require 'pagerduty/models/notes'
29
34
  require 'pagerduty/models/incident'
35
+ require 'pagerduty/models/incidents'
30
36
  require 'pagerduty/models/services'
31
37
 
38
+ # Requests
39
+ require 'pagerduty/requests/incident'
40
+ #require 'pagerduty/requests/alerts'
@@ -1,12 +1,94 @@
1
- class Array
2
-
3
- def method_missing(meth, *args, &block)
4
- if meth.to_s =~ /^(open|triggered|acknowledged|resolved)$/
5
- self.select { |incident| incident.status == meth.to_s }
6
- else
7
- # Call super so we don't mess up ruby's method lookup
8
- super
1
+ class Pagerduty
2
+ module Core
3
+
4
+ ###################################################################################
5
+ # def curl
6
+ #
7
+ # Purpose: Performs a CURL request
8
+ #
9
+ # Params: options<~Hash> - The options Hash to send
10
+ # uri<~String> - The URI to curl
11
+ # ssl<~Boolean><Optional> - Whether or not to use SSL
12
+ # port<~Integer><Optional> - The port number to connect to
13
+ # params<~Hash><Optional> - The params to send in the curl request
14
+ # headers<~Hash><Optional> - The headers to send in the curl request
15
+ # method<~String> - The HTTP method to perform
16
+ # basic_auth<~Hash><Optional>
17
+ # user<~String> - Basic auth user
18
+ # password<~String> - Basic auth password
19
+ #
20
+ # Returns: <String>
21
+ ###################################################################################
22
+ def curl(options)
23
+
24
+ curl_request = {
25
+ ssl: true,
26
+ port: 443,
27
+ headers: {
28
+ "Content-Type" => "application/json",
29
+ "Authorization" => "Token token=#{Pagerduty.class_variable_get(:@@token)}",
30
+ },
31
+ }
32
+
33
+ options.merge! curl_request
34
+
35
+ url = URI.parse(options[:uri])
36
+
37
+ if options[:params]
38
+ parameters = options[:params].map { |k,v| "#{k}=#{v}" }.join("&")
39
+ url += "?#{parameters}"
40
+ end
41
+
42
+ http = Net::HTTP.new(url.host, 443)
43
+ http.use_ssl = true
44
+
45
+ request = case options[:method]
46
+ when 'DELETE'
47
+ Net::HTTP::Delete.new(url)
48
+ when 'GET'
49
+ Net::HTTP::Get.new(url)
50
+ when 'POST'
51
+ Net::HTTP::Post.new(url)
52
+ when 'PUT'
53
+ Net::HTTP::Put.new(url)
54
+ end
55
+
56
+ if options.has_key?(:data)
57
+ request.set_form_data(options[:data])
58
+ end
59
+
60
+ if options.has_key?(:basic_auth)
61
+ request.basic_auth options[:basic_auth][:user], options[:basic_auth][:password]
62
+ end
63
+
64
+ request.body = options[:body]
65
+
66
+ options[:headers].each { |key,val| request.add_field(key,val) }
67
+
68
+ response = if options[:method] == 'POST'
69
+ http.post(url.path,options[:data].to_json,options[:headers])
70
+ elsif options[:method] == 'PUT'
71
+ http.put(url.path,options[:data].to_json,options[:headers])
72
+ else
73
+ http.request(request)
74
+ end
75
+
76
+ options[:raw_response] == true ? response : JSON.parse(response.body)
9
77
  end
10
- end
11
78
 
79
+
80
+ # Check a Hash object for expected keys
81
+ #
82
+ # ==== Parameters
83
+ # * 'keys'<~Array><~Object> - An array of objects expected to be found as keys in the supplied Hash
84
+ # * 'options'<~Hash> - The Hash to perform the check on
85
+ #
86
+ # ==== Returns
87
+ # * Boolean
88
+ #
89
+ def has_requirements?(keys,options)
90
+ (keys - options.keys).empty?
91
+ end
92
+
93
+ end
12
94
  end
@@ -0,0 +1,6 @@
1
+ class Alerts
2
+ include Virtus.model
3
+
4
+ attribute :alerts, Array[Alert]
5
+
6
+ end
@@ -52,18 +52,19 @@ class EscalationRule < Pagerduty
52
52
  def delete
53
53
  res = curl({
54
54
  uri: "https://#@@subdomain.pagerduty.com/api/v1/escalation_policies/#{parent_policy.id}/escalation_rules/#{self.id}",
55
- method: 'DELETE'
55
+ method: 'DELETE',
56
+ raw_response: true
56
57
  })
57
58
 
58
59
  res.code == '200' ? 'Successfully deleted' : JSON.parse(res.body)
59
60
  end
60
61
 
61
62
  def save
62
- self.attributes = JSON.parse(curl({
63
+ self.attributes = curl({
63
64
  uri: "https://#@@subdomain.pagerduty.com/api/v1/escalation_policies/#{parent_policy.id}/escalation_rules/#{self.id}",
64
65
  data: self.hashify,
65
66
  method: 'PUT'
66
- }).body)['escalation_rule']
67
+ })['escalation_rule']
67
68
  end
68
69
 
69
70
  end
@@ -1,74 +1,26 @@
1
- class Incident < Pagerduty
2
- include Virtus.model
3
-
4
- attribute :id
5
- attribute :incident_number
6
- attribute :created_on
7
- attribute :status
8
- attribute :html_url
9
- attribute :incident_key
10
- attribute :service, Service
11
- attribute :escalation_policy, EscalationPolicy
12
- attribute :assigned_to_user, AssignedUser
13
- attribute :trigger_summary_data, TriggerSummaryData
14
- attribute :trigger_details_html_url
15
- attribute :trigger_type
16
- attribute :last_status_change_on
17
- attribute :last_status_change_by, LastStatusChangeBy
18
- attribute :number_of_escalations
19
- attribute :resolved_by_user, ResolvedByUser
20
-
21
- def inspect
22
- puts "<Pagerduty::#{self.class}"
23
- self.attributes.each { |attr,val|
24
- puts "\t#{attr}=#{val.class == Class ? "BLOCK" : val.inspect}"
25
- }
26
- puts ">"
27
-
28
- self.attributes
29
- end
30
-
31
- def notes
32
- super(self.id)
33
- end
34
-
35
- def acknowledge
36
- JSON.parse(curl({
37
- uri: "https://#@@subdomain.pagerduty.com/api/v1/incidents/#{self.id}/acknowledge",
38
- data: { 'requester_id' => self.assigned_to_user.id },
39
- method: 'PUT'
40
- }).body)
41
- end
42
-
43
- def resolve
44
- JSON.parse(curl({
45
- uri: "https://#@@subdomain.pagerduty.com/api/v1/incidents/#{self.id}/resolve",
46
- data: { 'requester_id' => self.assigned_to_user.id },
47
- method: 'PUT'
48
- }).body)
49
- end
50
-
51
- def reassign(options={})
52
-
53
- unless has_requirements?([:escalation_level, :assigned_to_user], options)
54
- puts "#> This function requires arguments :escalation_level, :assigned_to_user"
55
- puts "Please see: http://developer.pagerduty.com/documentation/rest/incidents/reassign"
56
- return
1
+ class Pagerduty
2
+ class Incidents
3
+
4
+ class Incident
5
+ include Virtus.model
6
+
7
+ attribute :id
8
+ attribute :incident_number
9
+ attribute :created_on
10
+ attribute :status
11
+ attribute :html_url
12
+ attribute :incident_key
13
+ attribute :service, Service
14
+ attribute :escalation_policy, EscalationPolicy
15
+ attribute :assigned_to_user, AssignedUser
16
+ attribute :trigger_summary_data, TriggerSummaryData
17
+ attribute :trigger_details_html_url
18
+ attribute :trigger_type
19
+ attribute :last_status_change_on
20
+ attribute :last_status_change_by, LastStatusChangeBy
21
+ attribute :number_of_escalations
22
+ attribute :resolved_by_user, ResolvedByUser
57
23
  end
58
24
 
59
- JSON.parse(curl({
60
- uri: "https://#@@subdomain.pagerduty.com/api/v1/incidents/#{self.id}/resolve",
61
- data: { 'requester_id' => self.assigned_to_user.id, }.merge(options),
62
- method: 'PUT'
63
- }).body)
64
- end
65
-
66
- def log_entries(options={})
67
- LogEntries.new(JSON.parse(curl({
68
- uri: "https://#@@subdomain.pagerduty.com/api/v1/incidents/#{self.id}/log_entries",
69
- params: options,
70
- method: 'GET'
71
- }).body))
72
25
  end
73
26
  end
74
-
@@ -0,0 +1,18 @@
1
+ class Pagerduty
2
+ class Incidents
3
+ include Virtus.model
4
+
5
+ attribute :incidents, Array[Pagerduty::Incidents::Incident]
6
+
7
+ self.instance_eval do
8
+ %w(triggered open acknowledged resolved).each do |status|
9
+ define_method(status) {
10
+ self.incidents.select { |incident|
11
+ incident.status == "#{status}"
12
+ }
13
+ }
14
+ end
15
+ end
16
+
17
+ end
18
+ end