Dustin Frisch
5 years ago
commit
c07913b65f
No known key found for this signature in database
GPG Key ID: B4C3BF012D9B26BE
4 changed files with 179 additions and 0 deletions
-
1.gitignore
-
14Pipfile
-
80Pipfile.lock
-
84main.py
@ -0,0 +1 @@ |
|||
/.idea |
@ -0,0 +1,14 @@ |
|||
[[source]] |
|||
name = "pypi" |
|||
url = "https://pypi.org/simple" |
|||
verify_ssl = true |
|||
|
|||
[dev-packages] |
|||
|
|||
[packages] |
|||
requests = "*" |
|||
click = "*" |
|||
munch = "*" |
|||
|
|||
[requires] |
|||
python_version = "3.8" |
@ -0,0 +1,80 @@ |
|||
{ |
|||
"_meta": { |
|||
"hash": { |
|||
"sha256": "05c89642e212fe9daf6d32672e810f0effe4bb3b51450c47d54c491cdbc130a1" |
|||
}, |
|||
"pipfile-spec": 6, |
|||
"requires": { |
|||
"python_version": "3.8" |
|||
}, |
|||
"sources": [ |
|||
{ |
|||
"name": "pypi", |
|||
"url": "https://pypi.org/simple", |
|||
"verify_ssl": true |
|||
} |
|||
] |
|||
}, |
|||
"default": { |
|||
"certifi": { |
|||
"hashes": [ |
|||
"sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", |
|||
"sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" |
|||
], |
|||
"version": "==2019.11.28" |
|||
}, |
|||
"chardet": { |
|||
"hashes": [ |
|||
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", |
|||
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" |
|||
], |
|||
"version": "==3.0.4" |
|||
}, |
|||
"click": { |
|||
"hashes": [ |
|||
"sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", |
|||
"sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" |
|||
], |
|||
"index": "pypi", |
|||
"version": "==7.0" |
|||
}, |
|||
"idna": { |
|||
"hashes": [ |
|||
"sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", |
|||
"sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" |
|||
], |
|||
"version": "==2.8" |
|||
}, |
|||
"munch": { |
|||
"hashes": [ |
|||
"sha256:2d735f6f24d4dba3417fa448cae40c6e896ec1fdab6cdb5e6510999758a4dbd2", |
|||
"sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd" |
|||
], |
|||
"index": "pypi", |
|||
"version": "==2.5.0" |
|||
}, |
|||
"requests": { |
|||
"hashes": [ |
|||
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", |
|||
"sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" |
|||
], |
|||
"index": "pypi", |
|||
"version": "==2.22.0" |
|||
}, |
|||
"six": { |
|||
"hashes": [ |
|||
"sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", |
|||
"sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" |
|||
], |
|||
"version": "==1.14.0" |
|||
}, |
|||
"urllib3": { |
|||
"hashes": [ |
|||
"sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", |
|||
"sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" |
|||
], |
|||
"version": "==1.25.8" |
|||
} |
|||
}, |
|||
"develop": {} |
|||
} |
@ -0,0 +1,84 @@ |
|||
import click |
|||
import requests |
|||
import json |
|||
|
|||
from xml.etree import ElementTree |
|||
|
|||
|
|||
def search_services(base_url, username, password, service): |
|||
ifservices = requests.get(base_url + '/api/v2/ifservices', |
|||
params={'limit': 0, |
|||
'_s': 'serviceType.name==' + service}, |
|||
headers={'Accept': 'application/xml'}, |
|||
auth=(username, password)) |
|||
ifservices.raise_for_status() |
|||
ifservices = ElementTree.fromstring(ifservices.content) |
|||
|
|||
for service in ifservices.iter('service'): |
|||
ipiface_id = service.find('ipInterfaceId').text |
|||
|
|||
node = requests.get(base_url + '/api/v2/nodes', |
|||
params={'limit': 0, |
|||
'_s': 'ipInterface.id==' + ipiface_id}, |
|||
headers={'Accept': 'application/xml'}, |
|||
auth=(username, password)) |
|||
node.raise_for_status() |
|||
node = ElementTree.fromstring(node.content).find('node') |
|||
|
|||
node_id = node.get('id') |
|||
node_label = node.get('label') |
|||
|
|||
ipiface = requests.get(base_url + '/api/v2/nodes/' + node_id + '/ipinterfaces', |
|||
params={'limit': 0, |
|||
'_s': 'id==' + ipiface_id}, |
|||
headers={'Accept': 'application/xml'}, |
|||
auth=(username, password)) |
|||
ipiface.raise_for_status() |
|||
ipiface = ElementTree.fromstring(ipiface.content).find('ipInterface') |
|||
|
|||
ipiface_address = ipiface.find('ipAddress').text |
|||
|
|||
yield node_label, node_id, ipiface_address |
|||
|
|||
|
|||
@click.command() |
|||
@click.option('--base-url', default='http://localhost:8980/opennms') |
|||
@click.option('--username', default='admin') |
|||
@click.option('--password', default='admin') |
|||
@click.option('--service', default='HTTP') |
|||
@click.option('--bs-id', default=0) |
|||
def main(base_url, username, password, service, bs_id): |
|||
# Strip trailing slash from base URL |
|||
if base_url.endswith('/'): |
|||
base_url = base_url[:-1] |
|||
|
|||
rkeys = ((label, 'uei.opennms.org/nodes/nodeLostService::%s:%s:%s' % (node, addr, service)) |
|||
for (label, node, addr) |
|||
in search_services(base_url, username, password, service)) |
|||
|
|||
bs = {'name': service, |
|||
'reduce-function': {'type': 'HighestSeverity'}, |
|||
'reduction-key-edges': [{ |
|||
'weight': 1, |
|||
'map-function': {'type': 'Identity'}, |
|||
'reduction-key': rkey, |
|||
} for (label, rkey) in rkeys]} |
|||
|
|||
bs = json.dumps(bs) |
|||
|
|||
r = requests.put(base_url + '/api/v2/business-services/' + str(bs_id), |
|||
headers={'Accept': 'application/json', |
|||
'Content-Type': 'application/json'}, |
|||
auth=(username, password), |
|||
data=bs) |
|||
r.raise_for_status() |
|||
|
|||
r = requests.post(base_url + '/api/v2/business-services/daemon/reload', |
|||
headers={'Accept': 'application/json', |
|||
'Content-Type': 'application/json'}, |
|||
auth=(username, password)) |
|||
r.raise_for_status() |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
main() |
Write
Preview
Loading…
Cancel
Save
Reference in new issue