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 +4 -4
- data/lib/zenoss_api/version.rb +1 -1
- data/lib/zenoss_api.rb +87 -46
- data/zenoss_api.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccc01b38fe84290c614679cf9e4dec45178becb6
|
4
|
+
data.tar.gz: cefda83026ebac1c440221b8c340026e6f3b7522
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: febce1894dd23e4dbd8138fcfadde4f3190e6ea27a1820ab8d9b53acccfc869613ed978c4f6a04e156356fbf5916bfbe5d8efd01fde36bf4ae1ff2f746716cec
|
7
|
+
data.tar.gz: a6d91efa744df6e8c604da51f4b7b63fef8c424629e72cbee45f16ea59aa6589b73c7d762f52eff337952179ec9a2c1ff4da4573ff8be75eb6e3d7dadf5e2c45
|
data/lib/zenoss_api/version.rb
CHANGED
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
|
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['
|
91
|
-
data = response[
|
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
|
-
|
124
|
-
|
125
|
-
|
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
|
-
|
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' =>
|
161
|
+
'data' => _data,
|
137
162
|
'type' => 'rpc',
|
138
163
|
'tid' => @rec_count
|
139
164
|
}]
|
140
165
|
|
141
166
|
if options[:paginate]
|
142
|
-
self.
|
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[
|
187
|
+
response[type][0]['uid']
|
167
188
|
else
|
168
189
|
nil
|
169
190
|
end
|
170
191
|
end
|
171
192
|
end
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
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
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
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
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
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.
|
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-
|
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:
|
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:
|
68
|
+
version: 0.4.5
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: httparty
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|