From aaca63e7f6a604b798255f0b191e9a574acd4add Mon Sep 17 00:00:00 2001 From: Vermaas <vermaas@astron.nl> Date: Wed, 6 Mar 2024 16:27:58 +0100 Subject: [PATCH] add status plots (experimental) --- .../taskdatabase/graphs/status_graph.html | 14 +++++++++++ .../graphs/status_graph_input_form.html | 24 +++++++++++++++++++ atdb/taskdatabase/views.py | 24 ++++++++++++------- 3 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 atdb/taskdatabase/templates/taskdatabase/graphs/status_graph.html create mode 100644 atdb/taskdatabase/templates/taskdatabase/graphs/status_graph_input_form.html diff --git a/atdb/taskdatabase/templates/taskdatabase/graphs/status_graph.html b/atdb/taskdatabase/templates/taskdatabase/graphs/status_graph.html new file mode 100644 index 00000000..dcff6bad --- /dev/null +++ b/atdb/taskdatabase/templates/taskdatabase/graphs/status_graph.html @@ -0,0 +1,14 @@ +{% extends 'taskdatabase/base.html' %} +{% load static %} + +{% block myBlock %} +<div class="hiking-container container-fluid"> + <div class="card"> + <div class="card-body"> + + <img src="/atdb/static/status_graph.png" alt="Status Graph"> + </div> + </div> +</div> + +{% endblock %} \ No newline at end of file diff --git a/atdb/taskdatabase/templates/taskdatabase/graphs/status_graph_input_form.html b/atdb/taskdatabase/templates/taskdatabase/graphs/status_graph_input_form.html new file mode 100644 index 00000000..ca902094 --- /dev/null +++ b/atdb/taskdatabase/templates/taskdatabase/graphs/status_graph_input_form.html @@ -0,0 +1,24 @@ +{% extends 'taskdatabase/base.html' %} +{% load static %} + +{% block myBlock %} +<div class="hiking-container container-fluid"> + <div class="card"> + <div class="card-body"> + <form action="{% url 'create_status_graph' %}" method="post"> + {% csrf_token %} + <label for="status">Which (end) status to plot?:</label> + <input type="text" id="status" name="status" value="finished"><br><br> + <label for="days">Last X days:</label> + <input type="number" id="days" name="days" value="30"><br><br> + <label for="bin_size">Bin Size:</label> + <select id="bin_size" name="bin_size" value="day"> + <option value="day">Day</option> + <option value="hour">Hour</option> + </select><br><br> + <button type="submit">Generate Graph</button> + </form> + </div> + </div> +</div> +{% endblock %} \ No newline at end of file diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 542df75f..a0ceeb91 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -1,7 +1,12 @@ import logging import json from datetime import datetime, timedelta -import matplotlib.pyplot as plt +try: + import matplotlib.pyplot as plt +except: + # enable debugging, but without matplotlib + pass + import psycopg2 from . import config @@ -1804,14 +1809,15 @@ def CreateStatusGraph(request): # Calculate the date x days ago start_date = datetime.now() - timedelta(days=days_to_check) - + database = settings.DATABASES['default'] + dbname = database['NAME'] # Connect to your PostgreSQL database conn = psycopg2.connect( - dbname=config.DATABASES['default']['name'], - user=config.DATABASES['default']['user'], - password=config.DATABASES['default']['password'], - host=config.DATABASES['default']['host'], - port=config.DATABASES['default']['port'], + dbname=database['NAME'], + user=database['USER'], + password=database['PASSWORD'], + host=database['HOST'], + port=database['PORT'], ) # Execute the SQL query @@ -1841,9 +1847,9 @@ def CreateStatusGraph(request): plt.xticks(rotation=45) plt.grid(True) plt.tight_layout() - plt.savefig('records_per_{}_{}_last_{}days.png'.format(bin_size, status, days_to_check)) + plt.savefig('taskdatabase/static/status_graph.png') # Render the template with the graph return render(request, 'taskdatabase/graphs/status_graph.html') - return render(request, 'taskdatabase/graphs/status_graph_input_form.html') \ No newline at end of file + return render(request, 'taskdatabase/graphs/status_graph_input_form.html', {'image_path': 'status_graph.png'}) \ No newline at end of file -- GitLab