diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index e01d493c413af6df66ec62dff8db9bfe24e95a65..b846c15dcf892c1cfd9ba1dbc854ea4b46acec19 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -52,6 +52,7 @@ urlpatterns = [
     path('monitoring/', views.ShowMonitoring, name='monitoring'),
     path('diagram/', views.DiagramView.as_view(), name='diagram'),
     path('config/', views.ShowConfig, name='config'),
+   path('create_status_graph/', views.CreateStatusGraph, name='create_status_graph'),
 
     # --- REST API ---
 
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 4f9fdda8aad6aa1eab941c061ff83008af6b6237..542df75f55f5a7b560e31d0288eb0d1f11ecf3c8 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -1,5 +1,8 @@
 import logging
 import json
+from datetime import datetime, timedelta
+import matplotlib.pyplot as plt
+import psycopg2
 
 from . import config
 from django.contrib.auth.decorators import login_required
@@ -1763,3 +1766,84 @@ def UpdateSummaryFlag(request, task_id):
     return JsonResponse({
         'is_summary': task.is_summary
     })
+
+
+
+def CreateStatusGraph(request):
+    query_per_hour = """
+            SELECT
+              DATE_TRUNC('hour', timestamp) AS hour,
+              COUNT(*) AS num_records
+            FROM
+              taskdatabase_status
+            WHERE name = %s
+                AND timestamp >= %s  -- Filter for records within the last x days 
+            GROUP BY
+              DATE_TRUNC('hour', timestamp)
+            ORDER BY
+              DATE_TRUNC('hour', timestamp);
+        """
+    query_per_day = """
+            SELECT
+              DATE_TRUNC('day', timestamp) AS day,
+              COUNT(*) AS num_records
+            FROM
+              taskdatabase_status
+            WHERE name = %s
+                AND timestamp >= %s  -- Filter for records within the last x days 
+            GROUP BY
+              DATE_TRUNC('day', timestamp)
+            ORDER BY
+              DATE_TRUNC('day', timestamp);
+        """
+
+    if request.method == 'POST':
+        status = request.POST.get('status', 'finished')
+        days_to_check = int(request.POST.get('days', 60))
+        bin_size = request.POST.get('bin_size', 'day')
+
+        # Calculate the date x days ago
+        start_date = datetime.now() - timedelta(days=days_to_check)
+
+        # 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'],
+        )
+
+        # Execute the SQL query
+        cur = conn.cursor()
+        if bin_size == 'day':
+            cur.execute(query_per_day, (status,start_date))
+        else:
+            cur.execute(query_per_hour, (status, start_date))
+
+        # Fetch the results
+        results = cur.fetchall()
+
+        # Close cursor and connection
+        cur.close()
+        conn.close()
+
+        # Extract hours and number of records from results
+        records = [result[0] for result in results]
+        num_records = [result[1] for result in results]
+
+        # Plot the graph
+        plt.figure(figsize=(10, 6))
+        plt.plot(records, num_records, marker='o')
+        plt.xlabel(bin_size.capitalize())
+        plt.ylabel('Number of Records')
+        plt.title(f'{status} per {bin_size} for the last {days_to_check} days')
+        plt.xticks(rotation=45)
+        plt.grid(True)
+        plt.tight_layout()
+        plt.savefig('records_per_{}_{}_last_{}days.png'.format(bin_size, status, days_to_check))
+
+        # 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