Skip to content

Instantly share code, notes, and snippets.

@gregbuehler
Created June 21, 2019 17:38
Show Gist options
  • Save gregbuehler/0cbd213b9c376d2a425b74fccb711e92 to your computer and use it in GitHub Desktop.
Save gregbuehler/0cbd213b9c376d2a425b74fccb711e92 to your computer and use it in GitHub Desktop.
WIP NRI Splunk OHI
#!/usr/bin/env python
import requests
import argparse
import json
def remove_unwanted_data(data):
if 'eai:acl' in data: del data['eai:acl']
if 'pass4SymmKey' in data: del data['pass4SymmKey']
return data
def get_server_roles(endpoint, username, password):
creds = (username, password)
payload = { 'output_mode': 'json' }
r = requests.get(f"{endpoint}/services/server/roles", auth=creds, params=payload)
data = r.json()['entry'][0]['content']
data = remove_unwanted_data(data)
return data
def get_server_settings(endpoint, username, password):
creds = (username, password)
payload = { 'output_mode': 'json' }
r = requests.get(f"{endpoint}/services/server/settings", auth=creds, params=payload)
data = r.json()['entry'][0]['content']
data = remove_unwanted_data(data)
return data
def get_cluster_config(endpoint, username, password):
creds = (username, password)
payload = { 'output_mode': 'json' }
r = requests.get(f"{endpoint}/services/cluster/config", auth=creds, params=payload)
data = r.json()['entry'][0]['content']
data = remove_unwanted_data(data)
return data
def get_resource_iostat(endpoint, username, password):
creds = (username, password)
payload = { 'output_mode': 'json' }
r = requests.get(f"{endpoint}/services/server/status/resource-usage/iostats", auth=creds, params=payload)
data = r.json()['entry'][0]['content']
data = remove_unwanted_data(data)
return data
def get_indexes(endpoint, username, password):
creds = (username, password)
payload = { 'output_mode': 'json' }
r = requests.get(f"{endpoint}/services/data/indexes-extended", auth=creds, params=payload)
data = {}
for element in r.json()['entry']:
data[element['name']] = element['content']
data = remove_unwanted_data(data)
return data
def get_kvstore(endpoint, username, password):
creds = (username, password)
payload = { 'output_mode': 'json' }
r = requests.get(f"{endpoint}/services/kvstore/status", auth=creds, params=payload)
data = r.json()['entry'][0]['content']
data = remove_unwanted_data(data)
return data
def main():
result = {
'name': 'com.surveymonkey.splunk',
'protocol_version': 3,
'integration_version': '0.0.1',
'data': []
}
data = {
'entity': {},
'metrics': [],
'inventory': {}
}
parser = argparse.ArgumentParser()
parser.add_argument("-m", "--mgmt", type=str, help="Url of the management endpoint (e.g. https://foo.example.com:8089)")
parser.add_argument("-u", "--username", type=str, help="Username")
parser.add_argument("-p", "--password", type=str, help="Password")
args = parser.parse_args()
cluster_config = get_cluster_config(args.mgmt, args.username, args.password)
roles = get_server_roles(args.mgmt, args.username, args.password)
settings = get_server_settings(args.mgmt, args.username, args.password)
iostat = get_resource_iostat(args.mgmt, args.username, args.password)
indexes = get_indexes(args.mgmt, args.username, args.password)
kvstore = get_kvstore(args.mgmt, args.username, args.password)
data['entity'] = {
'name': settings['host_resolved'],
'type': 'splunk_service',
'id_attributes': []
}
data['metrics'] = [ iostat ]
data['inventory'] = {
'cluster_config': cluster_config,
'server_roles': roles,
'server_settings': settings,
'indexes': indexes,
'kvstore': kvstore
}
result['data'] = [ data ]
print(json.dumps(result, indent=4))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment