diff --git a/.env b/.env new file mode 100644 index 0000000..ddc59f9 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +IP=0.0.0.0 +PORT=99 diff --git a/index.py b/index.py index 16eaa4e..ec4f6d4 100644 --- a/index.py +++ b/index.py @@ -1,13 +1,46 @@ +from dotenv import load_dotenv from flask import Flask, render_template from flask_apscheduler import APScheduler +from flask_login import LoginManager import docker -from pprint import pprint import time +import os + +#DEBUG +from pprint import pprint + +def calculate_cpu_percent(stats, status): + if (status != "running"): + return 0 + + cpu_count = len(stats["cpu_stats"]["cpu_usage"]["percpu_usage"]) + cpu_percent = 0.0 + cpu_delta = float(stats["cpu_stats"]["cpu_usage"]["total_usage"]) - \ + float(stats["precpu_stats"]["cpu_usage"]["total_usage"]) + system_delta = float(stats["cpu_stats"]["system_cpu_usage"]) - \ + float(stats["precpu_stats"]["system_cpu_usage"]) + + if system_delta > 0.0: + cpu_percent = cpu_delta / system_delta * 100.0 * cpu_count + + return round(cpu_percent, 2) + +def calculate_ram_percent(stats, status): + if (status != "running"): + return 0 + + mem_used = stats["memory_stats"]["usage"] - stats["memory_stats"]["stats"]["cache"] + stats["memory_stats"]["stats"]["active_file"] + limit = stats['memory_stats']['limit'] + + return round(mem_used / limit * 100, 2) client = docker.from_env() +#login_manager = LoginManager() app = Flask(__name__) scheduler = APScheduler() - +load_dotenv() +#login_manager.init_app(app) +#https://flask-login.readthedocs.io/en/latest/ @app.route("/", methods=['GET']) def index(): @@ -17,12 +50,13 @@ def index(): @app.route("/parts/modal/container/", methods=['GET']) def parts_container_modal(container_id): container = client.containers.get(container_id) - + stats = container.stats(stream=False) + #com.docker.extension.detailed-description project = '' if('com.docker.compose.project' in container.attrs['Config']['Labels']): project = container.attrs['Config']['Labels']['com.docker.compose.project'] - return render_template("container_modal.html", name=container.name, project=project, ports=container.attrs['NetworkSettings']['Ports'], status=container.status) + return render_template("container_modal.html", name=container.name, project=project, ports=container.attrs['NetworkSettings']['Ports'], status=container.status, CPU=calculate_cpu_percent(stats, container.status) ,RAM =calculate_ram_percent(stats, container.status) ) @app.route("/api//", methods=['DELETE', 'POST']) def api_stop_container(container_id, action): @@ -50,4 +84,4 @@ def scheduleTasks(): if __name__ == '__main__': #scheduler.add_job(id = 'scheduled_tasks', func=scheduleTasks, trigger="interval", seconds=3) #scheduler.start() - app.run(host="0.0.0.0", port=99, debug=True) + app.run(host=os.getenv('IP'), port=os.getenv('port'), debug=True) diff --git a/templates/base.html b/templates/base.html deleted file mode 100644 index e69de29..0000000 diff --git a/templates/container_modal.html b/templates/container_modal.html index e4f154c..d857b8f 100644 --- a/templates/container_modal.html +++ b/templates/container_modal.html @@ -1,7 +1,21 @@ -{{name}}
-{{project}}
-{{status}}
-{% for port in ports %} -{{ port.split("/")[0] }} -{%endfor%} - + + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 168febc..091e70b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -11,13 +11,13 @@ - -

{{title}}

+
-
+

Containers

+
{% for container in containers %} -
-
+
+
@@ -28,14 +28,16 @@ - +
-

{{container.attrs['Config']['Labels']['com.docker.compose.project']}}

+

{{container.attrs['Config']['Labels']['com.docker.compose.project']}}

{{container.name}}
+ {% if container.status=="running" %} {% for port in container.attrs['NetworkSettings']['Ports'] %} - {{ port.split("/")[0] }} + {{ port.split("/")[0] }} {%endfor%} + {%endif%}
@@ -45,10 +47,12 @@