xcal-parktronic 0.0.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +7 -0
  3. data/README.md +73 -7
  4. data/lib/xcal/parktronic.rb +11 -0
  5. data/lib/xcal/parktronic/api_client.rb +8 -5
  6. data/lib/xcal/parktronic/generic_response.rb +18 -2
  7. data/lib/xcal/parktronic/routes.rb +9 -2
  8. data/lib/xcal/parktronic/routes/alarms.rb +115 -34
  9. data/lib/xcal/parktronic/routes/command_notifications.rb +56 -0
  10. data/lib/xcal/parktronic/routes/custom_queries.rb +80 -0
  11. data/lib/xcal/parktronic/routes/event_history_items.rb +36 -0
  12. data/lib/xcal/parktronic/routes/events.rb +67 -0
  13. data/lib/xcal/parktronic/routes/metrics.rb +120 -0
  14. data/lib/xcal/parktronic/routes/nested/alarm_actions.rb +84 -0
  15. data/lib/xcal/parktronic/routes/nested/device_errors.rb +35 -0
  16. data/lib/xcal/parktronic/routes/nested/events.rb +57 -0
  17. data/lib/xcal/parktronic/routes/nested/metric_values.rb +35 -0
  18. data/lib/xcal/parktronic/routes/outages.rb +34 -0
  19. data/lib/xcal/parktronic/routes/stack_changes.rb +53 -0
  20. data/lib/xcal/parktronic/version.rb +1 -1
  21. data/spec/lib/xcal/parktronic/api_client_spec.rb +12 -2
  22. data/spec/lib/xcal/parktronic/routes/alarms_route_spec.rb +16 -1
  23. data/spec/lib/xcal/parktronic/routes/command_notifications_routes_spec.rb +32 -0
  24. data/spec/lib/xcal/parktronic/routes/event_history_items_routes_spec.rb +28 -0
  25. data/spec/lib/xcal/parktronic/routes/events_route_spec.rb +33 -0
  26. data/spec/lib/xcal/parktronic/routes/metrics_routes_spec.rb +92 -49
  27. data/spec/lib/xcal/parktronic/routes/nested/alarm_actions_spec.rb +58 -0
  28. data/spec/lib/xcal/parktronic/routes/nested/events_spec.rb +24 -0
  29. data/spec/lib/xcal/parktronic/routes/outages_routes_spec.rb +25 -0
  30. data/spec/lib/xcal/parktronic/routes/stack_changes_routes_spec.rb +38 -0
  31. data/spec/support/api_mock.rb +147 -2
  32. data/spec/support/fixtures/responses/alarm_action.json +19 -0
  33. data/spec/support/fixtures/responses/alarm_actions.json +40 -0
  34. data/spec/support/fixtures/responses/alarm_events.json +180 -0
  35. data/spec/support/fixtures/responses/alarm_post.json +12 -0
  36. data/spec/support/fixtures/responses/alarm_tags.json +1 -0
  37. data/spec/support/fixtures/responses/command_notification.json +7 -0
  38. data/spec/support/fixtures/responses/command_notifications.json +45 -0
  39. data/spec/support/fixtures/responses/event.json +22 -0
  40. data/spec/support/fixtures/responses/event_tags.json +1 -0
  41. data/spec/support/fixtures/responses/events.json +42 -0
  42. data/spec/support/fixtures/responses/events_history_page_1.json +55 -0
  43. data/spec/support/fixtures/responses/events_history_page_2.json +55 -0
  44. data/spec/support/fixtures/responses/metric.json +8 -0
  45. data/spec/support/fixtures/responses/metric_device_errors.json +610 -0
  46. data/spec/support/fixtures/responses/metric_metric_values.json +586 -0
  47. data/spec/support/fixtures/responses/metric_post.json +12 -0
  48. data/spec/support/fixtures/responses/metrics_page_1.json +90 -0
  49. data/spec/support/fixtures/responses/metrics_page_2.json +90 -0
  50. data/spec/support/fixtures/responses/outages_page_1.json +55 -0
  51. data/spec/support/fixtures/responses/outages_page_2.json +55 -0
  52. data/spec/support/fixtures/responses/stack_changes_page_1.json +80 -0
  53. data/spec/support/fixtures/responses/stack_changes_page_2.json +80 -0
  54. data/spec/support/fixtures/responses/stack_changes_post.json +12 -0
  55. data/xcal-parktronic.gemspec +1 -1
  56. metadata +76 -2
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTRjMTNmYzgwYWZmNTYzZDQ4NmJkZTBjOTE3OTg1ZTE0ZjA2ZDJhOA==
4
+ ZGJhY2FjMDA3YzIwYWY2ZGVjN2IwNTliNmJjMWNjZTZjYmU3NGU0Nw==
5
5
  data.tar.gz: !binary |-
6
- OTllOTViZWE1ODMyZTRmMGQ2YTRjYjBiZWE4NDNiY2JmYWYwNDc2Zg==
6
+ NmE2MzU3Mzk2NWJiZjk2ZTkxOWRhYzk4ZWE4OWM0NmM4MWVlNTE0Zg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OTg4NGU4YWU2OTZhZDVjOWUyOWY0ZGQyNzE1NmJlZDg2ZWU4MWI0MWQ0NGFi
10
- Mjc2OTZjMDg0NWY1NTkzOGE5ZDhiNDlhMjcxYWU2MmU4ZjFmNTI3ZTJmZGE1
11
- Njg3NmI5YjhjNTAyMmU1YmNmYTFlOTVhYWI5NTFjNjVlZDA5OWU=
9
+ ZDAxMzYyMTk1ZDM0MTg3MzkwNDVjNjg4YjMwYTA0M2UzNzhkZWJkM2Q1MTVj
10
+ ZWExNWZmNmZkYWU0YzJiNmYyZTI3ODk5ZjViOTE1YzI3OTFlNDkxY2RlOWM0
11
+ Mzg0YmJlZGRkYWE5YjkyMzZmNmRjNzE1YzBlYWZmMDY1YjJlZGU=
12
12
  data.tar.gz: !binary |-
13
- NTNjM2QwOGNmZDg4MTM5YTU5Yjk5NTQ4MzlkZjkzNzY0YTM4Yzk4MjBiZGFk
14
- NzQ5ZmZlYmNmZWE0NWUwNzZkODBkZDQzYTYzNDE5ZjVmYmExN2VkZTU1OTdl
15
- NzY3MTU5ZmVjMzk3NzcxM2NmYWRmNGI3OGUyNTg0MWJkOGJmYzY=
13
+ NjU4MTI5YTliN2RiM2QzZGQxZTVmMDg0MzE3M2JmNDc1NDFlMWRkMDkyNDk5
14
+ NTIxYzdhMDVlZmMyMWYyNTJiOWVkOTE1NDM2Y2U5YmY4ZGI2MjA3YzkwYTU0
15
+ YjFkZjY2ODFkZWVjYjE4MDViNDc4ODQyYjMzMzBmZDlkNzg5ODU=
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ script: "bundle exec rake test"
3
+ rvm:
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - 2.1.0
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+
2
+ [![Build Status](https://api.travis-ci.org/Ser1aL/xcal-parktronic.png?branch=master)](http://travis-ci.org/Ser1aL/xcal-parktronic)
3
+
1
4
  # Xcal::Parktronic
2
5
 
3
6
  TODO: Write a gem description
@@ -16,14 +19,77 @@ Or install it yourself as:
16
19
 
17
20
  $ gem install xcal-parktronic
18
21
 
22
+ ## RDocs
23
+
24
+ You can view documentation in RDoc format here:
25
+
26
+ http://rubydoc.info/gems/xcal-parktronic/frames
27
+
19
28
  ## Usage
20
29
 
21
- TODO: Write usage instructions here
30
+ # Initialization:
31
+
32
+ ```ruby
33
+ api = Xcal::Parktronic::ApiClient.new(access_token: 'your_access_token', endpoint: 'http://api_host')
34
+ ```
35
+
36
+ # Alarms:
37
+ ```ruby
38
+ api.alarms
39
+ api.alarm_tags(1)
40
+ api.search_alarm(name: 'test', tagged_with: 'test', time_range: 24, originating_system: 'Splunk', page: 1, per_page: 20)
41
+ ```
42
+
43
+ # Outages:
44
+ ```ruby
45
+ api.outages
46
+ api.outages(page: 2, per_page: 5)
47
+ ```
48
+
49
+ # Stack changes
50
+ ```ruby
51
+ api.stack_changes
52
+ api.stack_changes(page: 2, per_page: 5)
53
+ api.stack_changes(page: 2, per_page: 5, element: 'XBO')
54
+ api.stack_changes(time_range: {time_offset: -1, start_date: 0, start_time: 1440, end_time: 0}, element: 'XBO')
55
+ ```
56
+
57
+ # Events history
58
+ ```ruby
59
+ api.events_history
60
+ api.events_history(page: 2, per_page: 5)
61
+ api.events_history(host_impacted: 'xre-host-1', service_impacted: 'xre')
62
+ ```
63
+
64
+ # Command notifications (remote commands)
65
+ ```ruby
66
+ api.command_notifications
67
+ api.command_notifications(page: 1, per_page: 2)
68
+ api.update_command_notification(10)
69
+ ```
70
+
71
+ # Events
72
+ ```ruby
73
+ api.add_event
74
+ api.update_event
75
+ api.event_tags(1)
76
+ api.alarm(3).get_all_events
77
+ api.alarm(3).post_event(data)
78
+ ```
22
79
 
23
- ## Contributing
80
+ # Alarm Actions
81
+ ```ruby
82
+ api.alarm(3).get_alarm_actions
83
+ api.alarm(3).get_alarm_action(alarm_action_id)
84
+ api.alarm(3).post_alarm_action
85
+ api.alarm(3).update_alarm_action
86
+ api.alarm(3).set_position
87
+ ```
24
88
 
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
89
+ # Custom Queries
90
+ ```ruby
91
+ api.get_custom_queries
92
+ api.post_custom_query
93
+ api.update_custom_query
94
+ api.find_custom_query
95
+ ```
@@ -11,6 +11,17 @@ require 'hashie'
11
11
 
12
12
  # each route then common Routes module
13
13
  require 'xcal/parktronic/routes/alarms'
14
+ require 'xcal/parktronic/routes/events'
15
+ require 'xcal/parktronic/routes/nested/events'
16
+ require 'xcal/parktronic/routes/metrics'
17
+ require 'xcal/parktronic/routes/custom_queries'
18
+ require 'xcal/parktronic/routes/nested/alarm_actions'
19
+ require 'xcal/parktronic/routes/nested/metric_values'
20
+ require 'xcal/parktronic/routes/nested/device_errors'
21
+ require 'xcal/parktronic/routes/outages'
22
+ require 'xcal/parktronic/routes/stack_changes'
23
+ require 'xcal/parktronic/routes/event_history_items'
24
+ require 'xcal/parktronic/routes/command_notifications'
14
25
  require 'xcal/parktronic/routes'
15
26
 
16
27
  # exceptions
@@ -7,13 +7,16 @@ module Xcal
7
7
 
8
8
  # API Client initialization.
9
9
  #
10
- # Acceptable attributes:
11
- # +endpoint+ - OIV endpoint
12
- # +proxy+ - enables proxy if proxy url is passed
13
- # +access_token+ - access key to application
14
- # +version+ - api version. defaults to v1
10
+ # ==== Parameters
11
+ # * +endpoint+ - OIV endpoint
12
+ # * +proxy+ - enables proxy if proxy url is passed
13
+ # * +access_token+ - access key to application
14
+ # * +version+ - api version. defaults to v1
15
+ # ==== Examples
16
+ # api = Xcal::Parktronic::ApiClient.new(access_token: 'your_access_token', endpoint: 'http://api-host.com')
15
17
  def initialize(args)
16
18
  @args = args
19
+ @args.default_proc = proc{|h, k| h.key?(k.to_s) ? h[k.to_s] : nil}
17
20
  end
18
21
 
19
22
  def host
@@ -4,11 +4,19 @@ module Xcal
4
4
  class GenericResponse
5
5
  include Exceptions
6
6
 
7
+ # define all nested routes here
8
+ include Routes::Nested::Events
9
+ include Routes::Nested::DeviceErrors
10
+ include Routes::Nested::MetricValues
11
+ include Routes::Nested::AlarmActions
12
+
13
+ attr_reader :client
14
+
7
15
  # Generic Response initializations
8
16
  #
9
17
  # Accepted attributes are:
10
18
  # +raw_response+ should be a hash or a valid raw JSON string
11
- def initialize(raw_response = nil)
19
+ def initialize(raw_response = nil, client = nil)
12
20
  # nil input
13
21
  raise InvalidResponseArgument.new('Cannot create response object without raw response') if raw_response.nil?
14
22
 
@@ -28,12 +36,20 @@ module Xcal
28
36
  end
29
37
 
30
38
  @source = Hashie::Mash.new(@source)
39
+ @client = client
40
+ end
41
+
42
+ def has_key?(key)
43
+ @source.has_key?(key)
31
44
  end
32
45
 
33
46
  def method_missing(*args)
34
- # deep inject itself into the each object of the hash
47
+ # verify key in hashed self first
35
48
  if @source.has_key?(args.first)
36
49
  @source[args.first]
50
+ # verify key in nested routes
51
+ elsif respond_to?(args.first)
52
+ send args.first
37
53
  else
38
54
  raise NoMethodError, "undefined method `#{args.first}' for #{self.class}"
39
55
  end
@@ -2,8 +2,15 @@ module Xcal
2
2
  module Parktronic
3
3
 
4
4
  module Routes
5
- # include all available routes here
5
+ # include top-level routes here
6
6
  include Alarms
7
+ include Metrics
8
+ include Events
9
+ include Outages
10
+ include StackChanges
11
+ include EventHistoryItems
12
+ include CommandNotifications
13
+ include CustomQueries
7
14
  end
8
15
  end
9
- end
16
+ end
@@ -6,72 +6,153 @@ module Xcal
6
6
 
7
7
  # Fetches latest alarms
8
8
  #
9
- # Accepted attributes:
10
- # +page+ set page, defaults to 1
11
- # +per_page+ set per page value, defaults to 10
9
+ # ==== Parameters
10
+ # * +page+ page number, defaults to 1
11
+ # * +per_page+ per page value, defaults to 100
12
+ #
13
+ # ==== Examples
14
+ # api.get_paged_alarms
15
+ # api.get_paged_alarms(page: 2, per_page: 5)
16
+ # api.alarms
17
+ # api.alarms(page: 2, per_page: 5)
12
18
  def get_paged_alarms(args = {})
13
19
  args.merge!(:access_token => access_token)
14
20
  response = http.get("/#{api_version}/alarms?#{URI.encode_www_form(args)}")
15
21
 
16
22
  generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
17
- response.code == '200' ? generic_response.alarms.map(&:alarm) : generic_response
23
+ if response.code == '200'
24
+ generic_response.alarms.map { |alarm| Xcal::Parktronic::GenericResponse.new(alarm.alarm, self) }
25
+ else
26
+ generic_response
27
+ end
18
28
 
19
29
  # TODO Add caching
20
30
  end
21
31
  alias :alarms :get_paged_alarms
22
32
 
23
-
24
33
  # Fetches alarm with specific ID
25
34
  #
26
- # Accepted attributes:
27
- # +id+ alarm ID
35
+ # ==== Parameters
36
+ # * +id+ alarm ID
37
+ #
38
+ # ==== Examples
39
+ # api.get_alarm(2)
28
40
  def get_alarm(id)
29
41
  response = http.get("/#{api_version}/alarms/#{id}?access_token=#{access_token}")
30
42
 
31
43
  generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
32
- response.code == '200' ? generic_response.alarm : generic_response
44
+ response.code == '200' ? Xcal::Parktronic::GenericResponse.new(generic_response.alarm, self) : generic_response
33
45
 
34
46
  # TODO Add caching
35
47
  end
36
48
  alias :alarm :get_alarm
37
49
 
50
+
38
51
  # Posts new alarm
39
52
  #
40
- # Alarm argument should be a hash of Alarm + Events data.
53
+ # ==== Parameters
54
+ # * +alarm+ hash of Alarm data.
55
+ # * +events+ array of Events or leave blank for creating alarm without events.
41
56
  #
42
- # Example of alarm data:
43
- #
44
- # +alarm+ :
45
- # {
46
- # :name => 'alarm name',
47
- # :originating_system => 'Source System',
48
- # :impact_level => 'low',
49
- # :tag_list => %w(taga tagb)
50
- # }
57
+ # ==== Examples
58
+ # # Creates only Alarm, without Events
59
+ # api.post_alarm(alarm: {name: 'alarm name', originating_system: 'Source System', impact_level: 'low'})
60
+ # # Creates Alarm with Events
61
+ # alarm_params = {name: 'alarm name', originating_system: 'Source System', impact_level: 'low'}
62
+ # event_1_params = {subject: 'EventSubj', description: 'EventDesc', host_impacted: 'host', initiated_at: '2013-11-22T01:00:24Z', service_impacted: 'EventSvc', incident_status: 'CRITICAL'}
63
+ # api.post_alarm( alarm: alarm_params, events: [event_1_params, event_2_params, ...] )
64
+ def post_alarm(args = {})
65
+ url_path = args[:events].nil? ? 'alarms/create_without_events' : 'alarms'
66
+ request = Net::HTTP::Post.new("/#{api_version}/#{url_path}", 'Content-Type' => 'application/json')
67
+
68
+ params = { access_token: access_token, alarm: args[:alarm] }
69
+ params.merge!(events: args[:events]) unless args[:events].nil?
70
+
71
+ request.body = params.to_json
72
+ response = http.start { |net| net.request(request) }
73
+
74
+ Xcal::Parktronic::GenericResponse.new(response.body)
75
+ end
76
+
77
+ # Update alarm with specific ID
51
78
  #
52
- # Example of events array:
53
- # +events+ :
54
- # [
55
- # {
56
- # :subject => 'EventSubj',
57
- # :description => 'EventDesc',
58
- # :host_impacted => 'host',
59
- # :initiated_at => '2013-11-22T01:00:24Z',
60
- # :service_impacted => 'EventSvc',
61
- # :incident_status => 'CRITICAL'
62
- # }
63
- # ]
79
+ # ==== Parameters
80
+ # * +id+ alarm ID
81
+ # * +params+ alarm params
64
82
  #
65
- def post_alarm(alarm = {}, events = [])
66
- request = Net::HTTP::Post.new("/#{api_version}/alarms", 'Content-Type' => 'application/json')
67
- request.body = { access_token: access_token, alarm: alarm, events: events }.to_json
68
- response = http.start { |net| net.request(request) }
83
+ # ==== Examples
84
+ # api.update_alarm(2, name: 'new name')
85
+ # api.update_alarm(5, name: 'new name', originating_system: 'new system', description: 'test')
86
+ def update_alarm(id, params)
87
+ request = Net::HTTP::Patch.new("/#{api_version}/alarms/#{id}", 'Content-Type' => 'application/json')
88
+ request.body = { access_token: access_token, alarm: params }.to_json
69
89
 
90
+ response = http.start { |net| net.request(request) }
70
91
  Xcal::Parktronic::GenericResponse.new(response.body)
71
92
  end
72
93
 
73
94
  end
74
95
 
96
+ # Find all Alarm Tags
97
+ #
98
+ # ==== Parameters
99
+ # * +id+ alarm ID
100
+ #
101
+ # ==== Examples
102
+ # api.get_alarm_tags(2)
103
+ # api.alarm_tags(2)
104
+ def get_alarm_tags(id)
105
+ response = http.get("/#{api_version}/alarms/#{id}/tags?#{URI.encode_www_form(access_token: access_token)}")
106
+
107
+ generic_response = Xcal::Parktronic::GenericResponse.new(response.body, self)
108
+ response.code == '200' && generic_response.has_key?(:tags) ? generic_response.tags.map(&:tag) : generic_response
109
+ end
110
+ alias :alarm_tags :get_alarm_tags
111
+
112
+ # Search unclosed alarm by name or tag or originating system with time range
113
+ #
114
+ # ==== Parameters
115
+ # * +name+ string, alarm name
116
+ # * +tagged_with+ string or array, tag list
117
+ # * +time_range+ integer, time range in hours, defaults to 24 hours
118
+ # * +originating_system+ string or array, originating system name(s), blank by default (example: 'Op5_Nagios' or 'Op5_Nagios Splunk' or ['Op5_Nagios', 'Splunk'])
119
+ # * +page+ integer, page number, defaults to 1
120
+ # * +per_page+ integer, per page value, defaults to 100
121
+ #
122
+ # ==== Examples
123
+ # api.search_alarm(name: 'test alarm')
124
+ # api.search_alarm(tagged_with: 'test alarm', time_range: 120)
125
+
126
+ def search_alarm(args = {})
127
+ custom_extends = [ 'latest_event', 'latest_unclosed_event' ]
128
+ custom_scopes = { with_most_recent_events: [] }
129
+
130
+ #Filter
131
+ filter = { alarms: '' }
132
+ custom_filter = args[:originating_system]
133
+ custom_filter = custom_filter.split(' ') if custom_filter.is_a?(String)
134
+ filter = { alarms: custom_filter.map{|os| "originating_system = '#{os}'"}.join(' OR ') } unless custom_filter.nil?
135
+
136
+ #Scopes (time range)
137
+ custom_scopes[:within_event_date_range] = [(Time.now - (60 * (60 * args.fetch(:time_range, 24)))).strftime('%Y-%m-%d %H:%M:%S'), Time.now.strftime('%Y-%m-%d %H:%M:%S')]
138
+
139
+ #Tags
140
+ custom_scopes[:tagged_with] = args[:tagged_with] unless args[:tagged_with].nil?
141
+
142
+ # Params for request
143
+ scopes = URI.escape(custom_scopes.to_json)
144
+ search = URI.escape({name: args.fetch(:name, '')}.to_json)
145
+ extends = URI.escape(args.fetch(:extends, custom_extends).to_json)
146
+ filter = URI.escape(args.fetch(:filter, filter).to_json)
147
+ page = args.fetch(:page, 1)
148
+ per_page = args.fetch(:per_page, 100)
149
+
150
+ response = http.get("/#{api_version}/alarms/search?page=#{page}&per_page=#{per_page}&scopes=#{scopes}&search=#{search}&extends=#{extends}&filter=#{filter}&access_token=#{access_token}")
151
+
152
+ generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
153
+ response.code == '200' && generic_response.has_key?(:alarms) ? generic_response.alarms.map(&:alarm) : generic_response
154
+ end
155
+
75
156
  end
76
157
  end
77
158
  end
@@ -0,0 +1,56 @@
1
+ module Xcal
2
+ module Parktronic
3
+ module Routes
4
+
5
+ module CommandNotifications
6
+
7
+ # Fetches remote commands
8
+ #
9
+ # ==== Parameters
10
+ # * +page+ page number, defaults to 1
11
+ # * +per_page+ per page value, defaults to 100
12
+ #
13
+ # ==== Examples
14
+ # api.get_paged_command_notifications
15
+ # api.command_notifications
16
+ def get_paged_command_notifications(args = {})
17
+ args.merge!(access_token: access_token)
18
+ response = http.get("/#{api_version}/command_notifications?#{URI.encode_www_form(args)}")
19
+
20
+ generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
21
+ if response.code == '200' && generic_response.has_key?(:remote_commands)
22
+ generic_response.remote_commands.map { |command| Xcal::Parktronic::GenericResponse.new(command.remote_command, self) }
23
+ else
24
+ generic_response
25
+ end
26
+
27
+ # TODO Add caching
28
+ end
29
+ alias :command_notifications :get_paged_command_notifications
30
+
31
+
32
+ # Set inactive remote command
33
+ #
34
+ # ==== Parameters
35
+ # * +id+ remote command ID
36
+ #
37
+ # ==== Examples
38
+ # api.update_command_notification(1)
39
+ # api.set_inactive_command_notification(1)
40
+ def update_command_notification(id)
41
+ begin
42
+ request = Net::HTTP::Patch.new("/#{api_version}/command_notifications/#{id}", 'Content-Type' => 'application/json')
43
+ rescue # ruby 1.9.2
44
+ request = Net::HTTP::Put.new("/#{api_version}/command_notifications/#{id}", 'Content-Type' => 'application/json')
45
+ end
46
+ request.body = { access_token: access_token }.to_json
47
+
48
+ response = http.start { |net| net.request(request) }
49
+ Xcal::Parktronic::GenericResponse.new(response.body)
50
+ end
51
+ alias :set_inactive_command_notification :update_command_notification
52
+ end
53
+
54
+ end
55
+ end
56
+ end