zenoss_api 0.3.3 → 0.3.4

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: 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