zenoss_api 0.3.3 → 0.3.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe7cb83a35e2b25f8e17900d100565a10cf4ae07
4
- data.tar.gz: ba880498c462e7869ccbf543e8ebaecabbf9f2e7
3
+ metadata.gz: ccc01b38fe84290c614679cf9e4dec45178becb6
4
+ data.tar.gz: cefda83026ebac1c440221b8c340026e6f3b7522
5
5
  SHA512:
6
- metadata.gz: 4a87e98751f54151c4fd3794468efe43ec17a4ea56d314cf15b3aff593d4c6da32d3893f7d33fdcf3b20bbead2fa36170ef380ac9858c1214e9a9ca4b2f1ea2d
7
- data.tar.gz: bb0d699f1ef580806fa90e88d632747f44209b16aa2ba1197381a802a972be63b10abbf17efb51be3293d27a2da038e01a9c7443a48c0281371ddc43dd85ba02
6
+ metadata.gz: febce1894dd23e4dbd8138fcfadde4f3190e6ea27a1820ab8d9b53acccfc869613ed978c4f6a04e156356fbf5916bfbe5d8efd01fde36bf4ae1ff2f746716cec
7
+ data.tar.gz: a6d91efa744df6e8c604da51f4b7b63fef8c424629e72cbee45f16ea59aa6589b73c7d762f52eff337952179ec9a2c1ff4da4573ff8be75eb6e3d7dadf5e2c45
@@ -1,3 +1,3 @@
1
1
  module ZenossApi
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
data/lib/zenoss_api.rb CHANGED
@@ -23,6 +23,11 @@ module ZenossApi
23
23
  :UsersRouter => 'users',
24
24
  :EventClassesRouter => 'Events/evclasses',
25
25
  }
26
+
27
+ ROUTER_RETURN_KEYS = {
28
+ 'DeviceRouter' => 'devices',
29
+ 'EventsRouter' => 'events'
30
+ }
26
31
 
27
32
  DEFAULT_API_METHOD_ARGS = {
28
33
  :DeviceRouter => {
@@ -58,6 +63,14 @@ module ZenossApi
58
63
 
59
64
  }
60
65
 
66
+ PRODUCTION_STATE = {
67
+ :production => 1000,
68
+ :pre_production => 500,
69
+ :test => 400,
70
+ :maintenance => 300,
71
+ :decomissioned => -1,
72
+ }
73
+
61
74
  EVENT_SEVERITY = {
62
75
  :clear => 0, # Green
63
76
  :debug => 1, # Grey
@@ -80,15 +93,16 @@ module ZenossApi
80
93
  @verify = verify_ssl
81
94
  end
82
95
 
83
- def paginated_get(url, payload, xoffset=0)
96
+ def _paginated_post(url, payload, xoffset=0)
84
97
  Enumerator.new do |y|
85
98
  total = 0
86
99
  offset = 0
100
+ key = ROUTER_RETURN_KEYS[payload[0]['action']]
87
101
  limit = payload[0]['data'][0]['limit']
88
102
  loop do
89
103
  response = self._post(url, payload.to_json)
90
- totalCount = response['result']['totalCount']
91
- data = response['result']['events']
104
+ totalCount = response['totalCount']
105
+ data = response[key]
92
106
  total += data.length
93
107
  offset += limit
94
108
  payload[0]['data'][0]['start'] = offset
@@ -102,6 +116,11 @@ module ZenossApi
102
116
  end
103
117
  end
104
118
 
119
+ # http post to api
120
+ #
121
+ # @param [String] url of api endpoint
122
+ # @param [String] json data
123
+ # @return [Hash] result of api query
105
124
  def _post(url, payload)
106
125
  #### TODO wrap in rescue and handle exceptions
107
126
  response = HTTParty.post(url,
@@ -113,18 +132,24 @@ module ZenossApi
113
132
  :verify => @verify,
114
133
  })
115
134
  if response.code == 200
116
- response
135
+ response['result']
117
136
  else
118
- response
137
+ raise ({ code: response.code, response: response }).to_json
119
138
  end
120
139
  end
121
-
122
-
123
- def router(router, method, method_params={}, options={})
124
- if method_params.empty?
125
- _method_params = []
140
+
141
+ # api endpoint router method
142
+ #
143
+ # @param router [String] name of the zenoss api router
144
+ # @param method [String] name of the zenoss api method
145
+ # @param data [hash] api method arguments
146
+ # @param options [Hash] api execution control options
147
+ # @return [Hash] result of api query
148
+ def router(router, method, data={}, options={})
149
+ if data.empty?
150
+ _data = []
126
151
  else
127
- _method_params = [ method_params ]
152
+ _data = [ data ]
128
153
  end
129
154
 
130
155
  raise "Error: #{router} is not a valid route." unless ROUTERS.key?(router.to_sym)
@@ -133,20 +158,16 @@ module ZenossApi
133
158
  payload = [{
134
159
  'action' => router,
135
160
  'method' => method,
136
- 'data' => _method_params,
161
+ 'data' => _data,
137
162
  'type' => 'rpc',
138
163
  'tid' => @rec_count
139
164
  }]
140
165
 
141
166
  if options[:paginate]
142
- self.paginated_get(api_call, payload)
167
+ self._paginated_post(api_call, payload)
143
168
  else
144
169
  self._post(api_call, payload.to_json)
145
170
  end
146
- #@rec_count += 1
147
- end
148
-
149
- def _returnDeviceProperty()
150
171
  end
151
172
 
152
173
  def validateUids(uids, type="devices")
@@ -163,46 +184,66 @@ module ZenossApi
163
184
  else
164
185
  response = self.getDeviceProps(u, [ "uid" ])
165
186
  if not response.nil?
166
- response['result'][type][0]['uid']
187
+ response[type][0]['uid']
167
188
  else
168
189
  nil
169
190
  end
170
191
  end
171
192
  end
172
-
173
- def getDeviceProps(device, props=[])
174
- response = self.router("DeviceRouter", "getDevices", { 'keys' => props, 'params' => { 'name' => device } })
175
- if response['result']['success'] == true and response['result']['totalCount'] == 1
176
- response
193
+
194
+ # get device properties
195
+ #
196
+ # @param device [String] the name of the device (device title or id)
197
+ # @param properties [Array] properties to be returned; default uid
198
+ # @return [Hash] of device properties or nil if device not found
199
+ def getDeviceProperties(device, properties=[])
200
+ data = { 'keys' => properties, 'params' => { 'name' => device }, }
201
+ result = self.router("DeviceRouter", "getDevices", data)
202
+ if result['success'] == true and result['totalCount'] == 1
203
+ result
177
204
  else
178
205
  nil
206
+ end
179
207
  end
208
+
209
+ # helper method to extract uid from a router device query
210
+ #
211
+ # @param result [Hash] response from router request
212
+ # @return [String] device uid
213
+ def getResultUid(result)
214
+ result['devices'][0]['uid']
180
215
  end
181
-
182
- def setProductionState(fqdn, state = 1000)
183
- # set a single device prod state
184
216
 
185
- # Production:1000
186
- # Pre-Production:500
187
- # Test:400
188
- # Maintenance:300
189
- # Decommissioned:-1
217
+ # helper method to extract hash from a router query
218
+ #
219
+ # @param result [Hash] response from router request
220
+ # @return [String] device uid
221
+ def getResultHash(result)
222
+ result['hash']
223
+ end
224
+
225
+ # sets the production state on a device
226
+ #
227
+ # @param device [String] the name of the device (device title or id)
228
+ # @param state [Int] production state to set
229
+ def setProductionState(device, state = PRODUCTION_STATE[:production])
230
+ result = self.getDeviceProperties(device, ["uid"])
231
+ data = {
232
+ 'uids' => [ self.getResultUid(result) ],
233
+ 'hashcheck' => self.getResultHash(result),
234
+ 'prodState' => state,
235
+ }
236
+ self.router("DeviceRouter", "setProductionState", data)
237
+ end
190
238
 
191
- # lookup device uid
192
- node = self.getDeviceProps(fqdn, ["uid"])
193
- # set prod state
194
- if not node.nil?
195
- uids = [ node['result']['devices'][0]['uid'] ]
196
- hashcheck = node['result']['hash']
197
- method_params = {
198
- 'uids' => uids,
199
- 'prodState' => state,
200
- 'hashcheck' => hashcheck,
201
- }
202
- self.router("DeviceRouter", "setProductionState", method_params)
203
- else
204
- "Set production state falied"
205
- end
239
+ # get a list of devices under a device class
240
+ #
241
+ # @param device_class [String] device class to search
242
+ # @return [hash]
243
+ def getDevicesInDeviceClass(device_class='/zport/dmd/Devices', keys=['uid'], limit=nil)
244
+ data = { 'uid' => device_class, 'keys' => keys, 'limit' => limit }
245
+ result = self.router('DeviceRouter', 'getDevices', data)
206
246
  end
207
247
  end
208
248
  end
249
+
data/zenoss_api.gemspec CHANGED
@@ -33,6 +33,6 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency "bundler", "~> 1.7"
34
34
  spec.add_development_dependency "rake", "~> 10.0"
35
35
  spec.add_dependency "json"
36
- spec.add_dependency "io-console"
36
+ spec.add_dependency "io-console", "~> 0.4.5"
37
37
  spec.add_dependency "httparty"
38
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zenoss_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Stoll
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-06 00:00:00.000000000 Z
11
+ date: 2018-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: io-console
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.4.5
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.4.5
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: httparty
71
71
  requirement: !ruby/object:Gem::Requirement