Files
kops-arm64/app.py
2016-12-16 09:48:21 +01:00

58 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
import gevent.monkey
gevent.monkey.patch_all()
import connexion
import flask
import logging
import os
import requests
app = connexion.App(__name__)
session = requests.Session()
@app.app.route('/')
def index():
return flask.render_template('index.html')
def get_clusters():
api_server_url = 'http://localhost:8001/'
response = session.get('{}/api/v1/nodes'.format(api_server_url), timeout=5)
response.raise_for_status()
nodes = []
nodes_by_name = {}
for node in response.json()['items']:
obj = {'name': node['metadata']['name'], 'labels': node['metadata']['labels'], 'status': node['status'], 'pods': []}
nodes.append(obj)
nodes_by_name[obj['name']] = obj
response = session.get('http://localhost:8001/api/v1/pods', timeout=5)
response.raise_for_status()
for pod in response.json()['items']:
if 'nodeName' in pod['spec']:
nodes_by_name[pod['spec']['nodeName']]['pods'].append(pod)
try:
response = session.get('{}/api/v1/namespaces/kube-system/services/heapster/proxy/apis/metrics/v1alpha1/nodes'.format(api_server_url), timeout=5)
response.raise_for_status()
for metrics in response.json()['items']:
nodes_by_name[metrics['metadata']['name']]['usage'] = metrics['usage']
except:
logging.exception('Failed to get metrics')
return {'kubernetes_clusters': [{'nodes': nodes}]}
app.add_api('swagger.yaml')
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
if os.getenv('DEBUG', False):
kwargs = {'debug': True}
else:
kwargs = {'server': 'gevent'}
app.run(port=8080, **kwargs)