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