From 45bdcc92c7a3a0bb47cabb955ec82826d5390141 Mon Sep 17 00:00:00 2001 From: nicolargo Date: Fri, 21 Nov 2025 18:32:23 +0100 Subject: [PATCH] Add a first and simple Jupyter notebook --- .gitignore | 1 + Makefile | 3 + glances.ipynb | 525 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 529 insertions(+) create mode 100644 glances.ipynb diff --git a/.gitignore b/.gitignore index faba9de5..f5e86fa3 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ local.properties .classpath .settings/ .loadpath +.ipynb_checkpoints/ # External tool builders .externalToolBuilders/ diff --git a/Makefile b/Makefile index e2e8c88f..08e0f262 100644 --- a/Makefile +++ b/Makefile @@ -228,6 +228,9 @@ docs-server: docs ## Start a Web server to serve the documentation (sleep 2 && sensible-browser "http://localhost:$(PORT)") & cd docs/_build/html/ && .venv-uv/bin/uvrun python -m http.server $(PORT) +docs-jupyter: ## Start Jupyter Notebook + $(UV_RUN) run --with jupyter jupyter lab + release-note: ## Generate release note git --no-pager log $(LASTTAG)..HEAD --first-parent --pretty=format:"* %s" @echo "\n" diff --git a/glances.ipynb b/glances.ipynb new file mode 100644 index 00000000..c09c5869 --- /dev/null +++ b/glances.ipynb @@ -0,0 +1,525 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "592b8135-c06b-41b7-895e-9dd70787f6ac", + "metadata": {}, + "source": [ + "# Use Glances API in your Python code" + ] + }, + { + "cell_type": "markdown", + "id": "e5ec86ae-ce2b-452f-b715-54e746026a96", + "metadata": {}, + "source": [ + "## Init the Glances API" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ba9b3546-65a0-4eec-942b-1855ff5c5d32", + "metadata": {}, + "outputs": [], + "source": [ + "from glances import api" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e81ad928-3b61-4654-8589-13cb29e7f292", + "metadata": {}, + "outputs": [], + "source": [ + "gl = api.GlancesAPI()" + ] + }, + { + "cell_type": "markdown", + "id": "6ec912a3-0875-4cdb-8539-e84ffb27768a", + "metadata": {}, + "source": [ + "## Get plugins list" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1ce57a13-a90d-4d65-b4a4-2bc45112697e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['alert',\n", + " 'ports',\n", + " 'diskio',\n", + " 'containers',\n", + " 'processcount',\n", + " 'programlist',\n", + " 'gpu',\n", + " 'percpu',\n", + " 'vms',\n", + " 'system',\n", + " 'network',\n", + " 'cpu',\n", + " 'amps',\n", + " 'processlist',\n", + " 'load',\n", + " 'sensors',\n", + " 'uptime',\n", + " 'now',\n", + " 'connections',\n", + " 'fs',\n", + " 'wifi',\n", + " 'ip',\n", + " 'help',\n", + " 'version',\n", + " 'psutilversion',\n", + " 'core',\n", + " 'mem',\n", + " 'folders',\n", + " 'quicklook',\n", + " 'memswap',\n", + " 'raid']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.plugins()" + ] + }, + { + "cell_type": "markdown", + "id": "d5be2964-7a28-4b93-9dd0-1481afd2ee50", + "metadata": {}, + "source": [ + "## Get CPU stats" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0d1636d2-3f3e-44d4-bb67-45487384f79f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'total': 3.8, 'user': 3.0, 'nice': 0.0, 'system': 0.8, 'idle': 96.1, 'iowait': 0.1, 'irq': 0.0, 'steal': 0.0, 'guest': 0.0, 'ctx_switches': 0, 'interrupts': 0, 'soft_interrupts': 0, 'syscalls': 0, 'cpucore': 16, 'time_since_update': 141.46278643608093, 'ctx_switches_gauge': 12830371, 'ctx_switches_rate_per_sec': 0, 'interrupts_gauge': 9800040, 'interrupts_rate_per_sec': 0, 'soft_interrupts_gauge': 3875931, 'soft_interrupts_rate_per_sec': 0, 'syscalls_gauge': 0, 'syscalls_rate_per_sec': 0}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.cpu" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "99681a33-045e-43bf-927d-88b15872fad0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.cpu.get('total')" + ] + }, + { + "cell_type": "markdown", + "id": "07e30de4-8f2a-4110-9c43-2a87d91dbf24", + "metadata": {}, + "source": [ + "## Get MEMORY stats" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "33502d93-acf9-49c5-8bcd-0a0404b47829", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'total': 16422858752, 'available': 6726169136, 'percent': 59.0, 'used': 9696689616, 'free': 541847552, 'active': 8672595968, 'inactive': 5456875520, 'buffers': 354791424, 'cached': 6520318384, 'shared': 729960448}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.mem" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "404cd8d6-ac38-4830-8ead-4b747e0ca7b1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6779998768" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.mem.get('available')" + ] + }, + { + "cell_type": "markdown", + "id": "74e27e9f-3240-4827-a754-3538b7d68119", + "metadata": {}, + "source": [ + "Display it in a user friendly way:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "fa83b40a-51e8-45fa-b478-d0fcc9de4639", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'6.28G'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.auto_unit(gl.mem.get('available'))" + ] + }, + { + "cell_type": "markdown", + "id": "bfaf5b94-7c9c-4fdc-8a91-71f543cafa4b", + "metadata": {}, + "source": [ + "## Get NETWORK stats" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "a0ab2ce7-e9bd-4a60-9b90-095a9023dac7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'wlp0s20f3': {'bytes_sent': 1130903, 'bytes_recv': 2213272, 'speed': 0, 'key': 'interface_name', 'interface_name': 'wlp0s20f3', 'alias': 'WIFI', 'bytes_all': 3344175, 'time_since_update': 354.35748958587646, 'bytes_recv_gauge': 1108380679, 'bytes_recv_rate_per_sec': 6245.0, 'bytes_sent_gauge': 21062113, 'bytes_sent_rate_per_sec': 3191.0, 'bytes_all_gauge': 1129442792, 'bytes_all_rate_per_sec': 9437.0}}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.network" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b65f7280-d9f0-4719-9e10-8b78dc414bae", + "metadata": {}, + "outputs": [], + "source": [ + "Get the list of networks interfaces:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "1a55d32a-bd7d-4dfa-b239-8875c01f205e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['wlp0s20f3']" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.network.keys()" + ] + }, + { + "cell_type": "markdown", + "id": "8c7e0215-e96a-4f7e-a187-9b7bee1abcf9", + "metadata": {}, + "source": [ + "Get stats for a specific network interface:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "9aacfb32-c0e3-4fc7-b1d2-d216e46088cd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'bytes_sent': 118799,\n", + " 'bytes_recv': 275052,\n", + " 'speed': 0,\n", + " 'key': 'interface_name',\n", + " 'interface_name': 'wlp0s20f3',\n", + " 'alias': 'WIFI',\n", + " 'bytes_all': 393851,\n", + " 'time_since_update': 46.24822926521301,\n", + " 'bytes_recv_gauge': 1108795793,\n", + " 'bytes_recv_rate_per_sec': 5947.0,\n", + " 'bytes_sent_gauge': 21268464,\n", + " 'bytes_sent_rate_per_sec': 2568.0,\n", + " 'bytes_all_gauge': 1130064257,\n", + " 'bytes_all_rate_per_sec': 8516.0}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.network.get('wlp0s20f3')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "4f5ae513-6022-4a52-8d6c-e8b62afacc24", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5105.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.network.get('wlp0s20f3').get('bytes_recv_rate_per_sec')" + ] + }, + { + "cell_type": "markdown", + "id": "8b0bdbf4-e386-44aa-9585-1d042f0ded5d", + "metadata": {}, + "source": [ + "## Additional information" + ] + }, + { + "cell_type": "markdown", + "id": "5c52a0c7-06fb-432a-bdb7-9921f432d5a6", + "metadata": {}, + "source": [ + "Example for the LOAD plugin." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "99303a2b-52a3-440f-a896-ad4951a9de34", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'min1': 1.01123046875, 'min5': 0.83447265625, 'min15': 0.76171875, 'cpucore': 16}" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.load" + ] + }, + { + "cell_type": "markdown", + "id": "7a560824-2787-4436-b39b-63de0c455536", + "metadata": {}, + "source": [ + "Get the limit configured in the glances.conf:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "cbbc6a81-623f-4eff-9d08-e6a8b5981660", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'min1': {'description': 'Average sum of the number of processes waiting in the run-queue plus the number currently executing over 1 minute.',\n", + " 'unit': 'float'},\n", + " 'min5': {'description': 'Average sum of the number of processes waiting in the run-queue plus the number currently executing over 5 minutes.',\n", + " 'unit': 'float'},\n", + " 'min15': {'description': 'Average sum of the number of processes waiting in the run-queue plus the number currently executing over 15 minutes.',\n", + " 'unit': 'float'},\n", + " 'cpucore': {'description': 'Total number of CPU core.', 'unit': 'number'}}" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.load.fields_description" + ] + }, + { + "cell_type": "markdown", + "id": "2bd51d13-77e3-48f0-aa53-af86df6425f8", + "metadata": {}, + "source": [ + "Get field description and unit:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "8682edcf-a8b9-424c-976f-2a301a05be6a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'history_size': 1200.0,\n", + " 'load_disable': ['False'],\n", + " 'load_careful': 0.7,\n", + " 'load_warning': 1.0,\n", + " 'load_critical': 5.0}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.load.get_limits()" + ] + }, + { + "cell_type": "raw", + "id": "3c671ff8-3a0c-48d3-8247-6081c69c19a9", + "metadata": {}, + "source": [ + "Get current stats views regarding limits:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "45e03e9b-233c-4359-bcbc-7d2f06aca1c6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'min1': {'decoration': 'DEFAULT',\n", + " 'optional': False,\n", + " 'additional': False,\n", + " 'splittable': False,\n", + " 'hidden': False},\n", + " 'min5': {'decoration': 'OK',\n", + " 'optional': False,\n", + " 'additional': False,\n", + " 'splittable': False,\n", + " 'hidden': False},\n", + " 'min15': {'decoration': 'OK_LOG',\n", + " 'optional': False,\n", + " 'additional': False,\n", + " 'splittable': False,\n", + " 'hidden': False},\n", + " 'cpucore': {'decoration': 'DEFAULT',\n", + " 'optional': False,\n", + " 'additional': False,\n", + " 'splittable': False,\n", + " 'hidden': False}}" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gl.load.get_views()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.14.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}