Created
April 5, 2019 16:05
-
-
Save jhamman/a7f8a00fa19cfa9ecaf5a252a4707842 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import os\n", | |
"from kubernetes import config\n", | |
"\n", | |
"os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/Users/jhamman/workdir/pangeo-cloud-federation/deployments/dev/secrets/gcloud-service-key.json'\n", | |
"\n", | |
"if os.path.exists(os.path.join(os.environ[\"HOME\"], '.kube/config')):\n", | |
" config.load_kube_config(\n", | |
" os.path.join(os.environ[\"HOME\"], '.kube/config'))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"\n", | |
"class K8sClusterStatus(object):\n", | |
" \n", | |
" def __init__(self, client=None, namespaces=None):\n", | |
" import kubernetes\n", | |
"\n", | |
" if client is None:\n", | |
" self.client = kubernetes.client.CoreV1Api()\n", | |
" if namespaces is None:\n", | |
" self.namespaces = [i.metadata.name for i in self.client.list_namespace().items]\n", | |
" \n", | |
" def _get_pod_table(self, namespace, html=True):\n", | |
" import pandas as pd\n", | |
"\n", | |
" from dateutil.tz import tzutc\n", | |
" import datetime\n", | |
" \n", | |
" pod_list = self.client.list_namespaced_pod(namespace)\n", | |
" \n", | |
" names = []\n", | |
" status = []\n", | |
" restarts = []\n", | |
" age = []\n", | |
" now = datetime.datetime.now(tz=tzutc())\n", | |
" for pod in pod_list.items:\n", | |
"\n", | |
" names.append(pod.metadata.name)\n", | |
" status.append(pod.status.phase)\n", | |
" restarts.append(pod.status.container_statuses[0].restart_count)\n", | |
" age.append(now - pod.status.container_statuses[0].state.running.started_at)\n", | |
"\n", | |
" pods = pd.DataFrame({'STATUS': status, 'RESTARTS': restarts, 'AGE': age}, index=names)\n", | |
" if html:\n", | |
" return pods.to_html(border=1)\n", | |
"\n", | |
" return pods\n", | |
" \n", | |
" def _widget(self):\n", | |
"\n", | |
" from ipywidgets import GridBox, Layout, Dropdown, HTML\n", | |
"\n", | |
" namespace = Dropdown(\n", | |
" options=self.namespaces,\n", | |
" value='default',\n", | |
" description='Namespace:',\n", | |
" disabled=False,\n", | |
" )\n", | |
"\n", | |
" main = HTML(self._get_pod_table(namespace.value), description='')\n", | |
" self.table = main\n", | |
" \n", | |
" def update_html(change):\n", | |
" main.value = self._get_pod_table(namespace.value)\n", | |
"\n", | |
" namespace.observe(update_html, names='value')\n", | |
"\n", | |
" box = GridBox(children=[namespace, main],\n", | |
" layout=Layout(display='flex',\n", | |
" flex_flow='column',\n", | |
" width='76%')\n", | |
" )\n", | |
" self._cached_widget = box\n", | |
" \n", | |
" return box\n", | |
"\n", | |
" def _ipython_display_(self, **kwargs):\n", | |
" return self._widget()._ipython_display_(**kwargs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "6c5eab0aa90f47f7b66b2478782641ff", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
"GridBox(children=(Dropdown(description='Namespace:', options=('default', 'kube-public', 'kube-system', 'prod',…" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"w = K8sClusterStatus()\n", | |
"display(w)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.1" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment