Objective
Some customers may want to leverage the opCharts API with python scripts. This article will provide one example of how this could be done.
Related pages
opCharts REST API Reference
Example
For this example we'll build a HTML Network Status web page via a CGI script. This page will be comprised of tables; the first table will summarize group status while the subsequent tables will provide node level details for each group.
Define modules and variables
This example will utilize the following modules.
...
Code Block |
---|
#!/usr/bin/python3
import urllib.request, http.cookiejar, json
PROTOCOL = 'https'
SERVER = 'demo.opmantek.com'
USERNAME = 'nmis'
with open('/var/www/opChartsApi.conf', 'r') as confFile:
USERPASS = confFile.read().strip() |
Configure URL handling
Code Block |
---|
CJ = http.cookiejar.CookieJar()
OPENER = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(CJ))
loginUrl = (PROTOCOL + '://' + SERVER + '/omk/opCharts/login')
loginDict = {'username' : USERNAME , 'password' : USERPASS}
DATA = urllib.parse.urlencode(loginDict).encode("utf-8")
REQUEST = urllib.request.Request(loginUrl, DATA)
OPENER.open(REQUEST) |
Query opCharts for Node Status
Code Block |
---|
nodeData = OPENER.open(PROTOCOL + '://' + SERVER + '/omk/opCharts/nodes.json')
nodeDecoded = nodeData.read().decode()
nodeList = json.loads(nodeDecoded) |
Build Group Centric Data Structure
Code Block |
---|
groupStatus = {}
for n in nodeList:
if n['group'] not in groupStatus:
groupStatus[n['group']] = {'up' : 0, 'down' : 0}
groupStatus[n['group']]['nodes'] = {}
if n['nodedown'] == 'true':
groupStatus[n['group']]['down'] += 1
else:
groupStatus[n['group']]['up'] += 1
groupStatus[n['group']]['nodes'][n['name']] = {'name' : n['name'], 'location' : n['location'], 'type' : n['nodeType'], 'net' : n['netType'], 'role' : n['roleType'], 'status' : n['nodestatus']} |
Loop Through The Data Building Tables
Code Block |
---|
print('Content-type: text/html\n\n')
print('<html>')
print('<style>table, th, td { border: 1px solid black; border-collapse: collapse;}</style>')
print('<head><title>Opmantek Network Status</title></head>')
print('<body><strong>Opmantek Network Status</strong><br><br>')
print('<table><tr><th>Group</th><th>Nodes Up</th><th>Nodes Down</th></tr>')
for k in sorted(groupStatus):
print('<tr><td>' + k + '</td><td> ' + str(groupStatus[k]['up']) + '</td><td> ' + str(groupStatus[k]['down']) + '</td></tr>')
print('</table><br><br>')
for k in sorted(groupStatus):
print('<strong>Group: ' + k + '</strong><br>')
print('<table><tr><th>Node</th><th>Location</th><th>Type</th><th>Net</th><th>Role</th><th>Status</th></tr>')
for g in sorted(groupStatus[k]['nodes']):
print('<tr><td>' + groupStatus[k]['nodes'][g]['name'] + '</td><td> ' + groupStatus[k]['nodes'][g]['location'] + ' </td><td> ' + groupStatus[k]['nodes'][g]['type'] + ' </td><td> ' + groupStatus[k]['nodes'][g]['net'] + ' </td><td> ' + groupStatus[k]['nodes'][g]['role'] + ' </td><td> ' + groupStatus[k]['nodes'][g]['status'] + ' </td>')
print('</table><br><br>')
print('</body>')
print('</html>') |