From cdb9257f6fcfbe1f1fbd17aa3bee5499a090dc36 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Malo=C5=A1t=C3=ADk?= <malostik@cesnet.cz>
Date: Sat, 18 Feb 2023 14:51:29 +0200
Subject: [PATCH] Fix: Render SQL query debug info

---
 .../templates/_layout_events_search.html      | 18 +------------
 .../design_bs3/templates/_macros_chart.html   |  4 +++
 .../design_bs3/templates/_macros_site.html    | 20 +++++++++++++++
 lib/hawat/static/js/hawat-jquery.js           | 25 ++++++++++++++++++-
 4 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/lib/hawat/blueprints/design_bs3/templates/_layout_events_search.html b/lib/hawat/blueprints/design_bs3/templates/_layout_events_search.html
index 8cbcd999..d608c525 100644
--- a/lib/hawat/blueprints/design_bs3/templates/_layout_events_search.html
+++ b/lib/hawat/blueprints/design_bs3/templates/_layout_events_search.html
@@ -474,23 +474,7 @@ ssh, udp
             </div>
             {%- endif %}
             {%- if sqlqueries is defined %}
-            <div class="alert alert-info">
-                <h3 class="panel-title">
-                    <a role="button" data-toggle="collapse" href="#query_list" aria-expanded="false" aria-controls="query_list">
-                        {{ get_icon('role-admin') }} {{ _('SQL queries') }} {{ get_icon('expand') }}
-                    </a>
-                </h3>
-                <div id="query_list" class="collapse">
-                    <hr>
-                    <ul class="list-group">
-                    {%- for q in sqlqueries %}
-                        <li class="list-group-item">
-                            <strong>{{ loop.index }}:</strong> <code>{{ q }}</code>
-                        </li>
-                    {%- endfor %}
-                    </ul>
-                </div>
-            </div>
+                {{ macros_site.render_sql_queries(sqlqueries) }}
             {%- endif %}
             {{ macros_site.render_timemarks(time_marks) }}
         {%- endif %}
diff --git a/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html b/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html
index 68219b7c..93b0bbf4 100644
--- a/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html
+++ b/lib/hawat/blueprints/design_bs3/templates/_macros_chart.html
@@ -1033,6 +1033,10 @@
                     {%- set _stats_var_name = None %}
                 {%- endif %}
 
+                {%- if not _stats_var_name and permission_can('power') %}
+                    {{ macros_site.render_sql_queries([], key=chsection[0]) }}
+                {%- endif %}
+
                 <!-- Tab panel - BEGIN ---------------------------------------->
                 {%- if 'timeline' in statistics %}
                     {{  render_chart_timeline_dict(
diff --git a/lib/hawat/blueprints/design_bs3/templates/_macros_site.html b/lib/hawat/blueprints/design_bs3/templates/_macros_site.html
index a9ca93df..c9fabfb6 100644
--- a/lib/hawat/blueprints/design_bs3/templates/_macros_site.html
+++ b/lib/hawat/blueprints/design_bs3/templates/_macros_site.html
@@ -396,6 +396,26 @@
                     </div> <!-- /.well -->
 {%- endmacro %}
 
+{%- macro render_sql_queries(query_list, key = '') %}
+                    <div class="alert alert-info">
+                        <h3 class="panel-title">
+                            <a role="button" data-toggle="collapse" href="#query_list{%- if key %}_{{ key }}{%- endif %}" aria-expanded="false" aria-controls="query_list{%- if key %}_{{ key }}{%- endif %}">
+                                {{ get_icon('role-admin') }} {{ _('SQL queries') }} {{ get_icon('expand') }}
+                            </a>
+                        </h3>
+                        <div id="query_list{%- if key %}_{{ key }}{%- endif %}" class="collapse">
+                            <hr>
+                            <ol class="list-group list-group-numbered">
+                            {%- for q in query_list %}
+                                <li class="list-group-item">
+                                    <code>{{ q }}</code>
+                                </li>
+                            {%- endfor %}
+                            </ol>
+                        </div>
+                    </div>
+{%- endmacro %}
+
 {%- macro render_raw_item_view(item) %}
                     <div class="well">
                         <h3 class="panel-title">{{ get_icon('debug') }} {{ _('Raw item') }}</h3>
diff --git a/lib/hawat/static/js/hawat-jquery.js b/lib/hawat/static/js/hawat-jquery.js
index aba10508..ad8f5c89 100644
--- a/lib/hawat/static/js/hawat-jquery.js
+++ b/lib/hawat/static/js/hawat-jquery.js
@@ -241,9 +241,32 @@ $(function() {
         }
         event.target.promise = $.getJSON(event.target.getAttribute('data-api-url'), function(data) {
             event.target.search_result_data = data;
+
+            let dict_key = event.target.getAttribute('data-dict-key');
+            render_sql_queries(data, dict_key);
+
             let stats = data['statistics'];
-            rendering_functions[event.target.getAttribute('data-dict-key')].forEach(rendering_func => rendering_func(stats));
+            rendering_functions[dict_key].forEach(rendering_func => rendering_func(stats));
             $(event.target.getAttribute('href') + ' div.chart-toolbar').removeClass('invisible');
         });
     });
 });
+
+// =========================== Helper functions ===========================
+
+function render_sql_queries(data, dict_key ) {
+    if (data.sqlqueries != undefined && $(`#query_list_${dict_key}`).length) {
+        let query_list = $(`#query_list_${dict_key} > ol.list-group`);
+        query_list.html(''); // clear the elements inside
+        query_list.append(
+            data.sqlqueries.map(query => `
+                <li class="list-group-item">
+                    <code>${query}</code>
+                </li>
+            `)
+        );
+    } else if ($(`#query_list_${dict_key}`).length) {
+        console.log("'sqlqueries' not present, skipping");
+        $(`#query_list_${dict_key}`).parent().addClass('hidden');
+    }
+}
-- 
GitLab