From ffc65103c8cc90ae4c04dbae8b54d75a8f10aed7 Mon Sep 17 00:00:00 2001 From: Kris-Sekula Date: Wed, 29 Jan 2020 10:19:48 +0100 Subject: [PATCH] CL20 remove token auth as api for stats uses basic auth only --- hx_metrics.py | 101 +++++++++++--------------------------------------- 1 file changed, 22 insertions(+), 79 deletions(-) diff --git a/hx_metrics.py b/hx_metrics.py index 762f5ac..deca40e 100644 --- a/hx_metrics.py +++ b/hx_metrics.py @@ -1,9 +1,10 @@ #!/usr/bin/env python2 -# ver 1.1 CL2019 +# ver 1.2 CL2020 from flask import Flask from flask import Response import requests +from requests.auth import HTTPBasicAuth import json import time from gevent.wsgi import WSGIServer @@ -21,7 +22,7 @@ hosts=[{'host':'10.1.1.1', 'username':'local/root', 'password':'*******'},{'host ''' # -server_IP ='10.100.253.13' +server_IP ='10.100.252.13' server_port = '8082' # Logging config @@ -43,17 +44,11 @@ def get_stats(): results ='' for host in hx_creds.hosts: logger.info("----------- Processing Host: %s -----------"%host['host']) - # get auth token (either cached or new one) - authdata = get_auth(host['host'], host['username'], host['password']) - if not authdata: - logger.info("Missing token, skipping host: "+host['host']) - continue url = "https://"+host['host'] - # uri for throughput data with "last 5 min" filter - uri_MBps = '/render?target=stats.counters.scvmclient.allhosts.nfsBytesRead.cluster.rate&target=stats.counters.scvmclient.allhosts.nfsBytesWritten.cluster.rate&format=json&from=-5min' + uri_MBps = '/stats?target=stats.counters.scvmclient.allhosts.nfsBytesRead.cluster.rate&target=stats.counters.scvmclient.allhosts.nfsBytesWritten.cluster.rate&format=json&from=-5min' # Get throughput data - MBps_data = get_stats(authdata,url+uri_MBps) + MBps_data = get_stats(host['username'],host['password'],url+uri_MBps) if MBps_data: try: MBps_Read=round(MBps_data[0]['datapoints'][-2][0],3) @@ -70,9 +65,9 @@ def get_stats(): pass # url to get the IOPS data - uri_IOPS = '/render?target=stats.counters.scvmclient.allhosts.nfsReads.cluster.rate&target=stats.counters.scvmclient.allhosts.nfsWrites.cluster.rate&format=json&from=-5min' + uri_IOPS = '/stats?target=stats.counters.scvmclient.allhosts.nfsReads.cluster.rate&target=stats.counters.scvmclient.allhosts.nfsWrites.cluster.rate&format=json&from=-5min' # get IOPS data - IOPS_data = get_stats(authdata,url+uri_IOPS) + IOPS_data = get_stats(host['username'],host['password'],url+uri_IOPS) if IOPS_data: try: IOPS_Read=round(IOPS_data[0]['datapoints'][-2][0],3) @@ -89,10 +84,10 @@ def get_stats(): pass # url to get Latency data - uri_Lat ='/render?target=divideSeries(stats.timers.scvmclient.allhosts.nfsReadLatency.cluster.total%2Cstats.counters.scvmclient.allhosts.nfsReads.cluster.count)&target=divideSeries(stats.timers.scvmclient.allhosts.nfsWriteLatency.cluster.total%2Cstats.counters.scvmclient.allhosts.nfsWrites.cluster.count)&format=json&from=-5min' + uri_Lat ='/stats?target=divideSeries(stats.timers.scvmclient.allhosts.nfsReadLatency.cluster.total%2Cstats.counters.scvmclient.allhosts.nfsReads.cluster.count)&target=divideSeries(stats.timers.scvmclient.allhosts.nfsWriteLatency.cluster.total%2Cstats.counters.scvmclient.allhosts.nfsWrites.cluster.count)&format=json&from=-5min' # get latency data - Lat_data = get_stats(authdata,url+uri_Lat) + Lat_data = get_stats(host['username'],host['password'],url+uri_Lat) if Lat_data: try: Lat_Read=round(Lat_data[0]['datapoints'][-2][0],3) @@ -114,81 +109,29 @@ def get_stats(): logger.info("----------- Finished -----------") return Response(results, mimetype='text/plain') -# -# Returns Authentication token -# -def get_auth(host, username, password): - - logger.info("Trying to auth "+host) - - global tokens - - headers={'content-type':'application/json'} - payload = { - "username": username, - "password": password, - "client_id": "HxGuiClient", - "client_secret": "Sunnyvale", - "redirect_uri": "http://"+host - } - - - if tokens.get(host): - # looks like we have token cached already - # let's check if it's valid - - payload = { - "access_token": tokens.get(host)['access_token'], - "scope": "READ", - "token_type": tokens.get(host)['token_type'] - } - try: - #validating token - url = 'https://%s/aaa/v1/validate'%host - response = requests.post(url,headers=headers,data=json.dumps(payload),verify=False,timeout=4) - if response.status_code == 200: - logger.info("Re-using existing auth token") - return tokens.get(host) - logger.error("Failed to validate existing token "+response.content) - except Exception as e: - logger.error("Post for token validate failed \n"+str(e)) - - # this happens if no cached token found, or existing token was invalid - url = 'https://%s/aaa/v1/auth?grant_type=password'%host - payload = { - "username": username, - "password": password, - "client_id": "HxGuiClient", - "client_secret": "Sunnyvale", - "redirect_uri": "http://"+host - } - - try: - response = requests.post(url,headers=headers,data=json.dumps(payload),verify=False,timeout=4) - if response.status_code == 201: - if response.json().get('access_token'): - tokens[host]=response.json() - logger.info("Got token ok") - return response.json() - logger.error("Failed get a token "+response.content) - return None - except Exception as e: - logger.error("Post for token get failed \n"+str(e)) - return None - # # calls HX API # -def get_stats(authdata, url): +def get_stats(username, password, url): logger.info("call for get_stats") try: - headers = {'Authorization': authdata['token_type'] + ' ' + authdata['access_token'],'Connection':'close'} - response = requests.get(url,headers=headers,verify=False,timeout=4) + headers = {'Connection':'close'} + + #logger.info("username: %s"%username) + #logger.info("pass: %s"%password) + #logger.info("url: %s"%url) + #logger.info("headers: %s"%headers) + + response = requests.get(url, auth=HTTPBasicAuth('admin',password), headers=headers, verify=False,timeout=4) + + #logger.info("status code:%s"%str(response.status_code)) + if response.status_code == 200: logger.info("Got data ok") return response.json() logger.error("Failed to get data "+response.content) return None + except Exception as e: logger.error("Post for data failed \n"+str(e)) return None