Projet

Général

Profil

0001-logs-direct-access-to-a-log-23298.patch

Lauréline Guérin, 17 avril 2020 10:49

Télécharger (5,47 ko)

Voir les différences:

Subject: [PATCH] logs: direct access to a log (#23298)

 passerelle/static/js/passerelle.js            | 28 +++++++++++++++----
 .../includes/resource-logs-table.html         |  5 +++-
 .../passerelle/manage/service_logs.html       |  8 ++++++
 passerelle/views.py                           |  9 ++++++
 tests/test_manager.py                         | 12 ++++++++
 5 files changed, 56 insertions(+), 6 deletions(-)
passerelle/static/js/passerelle.js
1
$(function() {
2
  $('#logs tbody tr').on('click', function() {
3
    var base_url = $(this).parents('table.main').data('log-base-url');
4
    var log_pk = $(this).data('pk');
1
open_log_window = function(base_url, log_pk) {
5 2
    var url = base_url + log_pk + '/';
3
    var current_url = window.location;
4
    if (window.location.href == window.location.origin + base_url + '?log_id=' + log_pk) {
5
      // remove log_id from url on modal close if direct access to a log
6
      window.history.pushState({}, 'no log', base_url);
7
    }
6 8
    $.get(url,
7 9
        function(response) {
8
          var $dialog = $(response).dialog({modal: true, width: 'auto'});
10
          var $dialog = $(response).dialog({
11
            modal: true,
12
            width: 'auto',
13
            open: function(event, ui) {
14
              window.history.pushState({'log_id': log_pk}, 'log id', base_url + '?log_id=' + log_pk);
15
            },
16
            close: function (event, ui) {
17
              window.history.back();
18
            }
19
          });
9 20
        });
21
};
22

  
23
$(function() {
24
  $('#logs tbody tr').on('click', function() {
25
    var base_url = $(this).parents('table.main').data('log-base-url');
26
    var log_pk = $(this).data('pk');
27
    open_log_window(base_url, log_pk);
10 28
  });
11 29
  $('#jobs tbody tr').on('click', function() {
12 30
    var base_url = $(this).parents('table.main').data('job-base-url');
passerelle/templates/passerelle/includes/resource-logs-table.html
11 11
    <tbody>
12 12
    {% for record in logrecords %}
13 13
    <tr class="level-{{record.level}}" data-pk="{{ record.pk }}">
14
        <td class="timestamp">{{ record.timestamp|localtime }}</td>
14
        <td class="timestamp">
15
          {{ record.timestamp|localtime|date:'DATE_FORMAT' }}
16
          {{ record.timestamp|localtime|time:"H:i:s" }}
17
        </td>
15 18
        <td>{{ record.sourceip|default:"-" }}</td>
16 19
        <td class="message">{{ record.message|censor }}</td>
17 20
    </tr>
passerelle/templates/passerelle/manage/service_logs.html
24 24
{% include "passerelle/includes/resource-logs-table.html" with logrecords=page_obj %}
25 25
</div>
26 26

  
27
{% if log_target %}
28
<script>
29
$(function () {
30
    open_log_window($('table.main').data('log-base-url'), {{ log_target.id }});
31
});
32
</script>
33
{% endif %}
34

  
27 35
{% endblock %}
passerelle/views.py
229 229
        context = super(GenericViewLogsConnectorView, self).get_context_data(**kwargs)
230 230
        context['object'] = self.get_object()
231 231
        context['query'] = self.request.GET.get('q') or ''
232
        if self.request.GET.get('log_id'):
233
            try:
234
                context['log_target'] = ResourceLog.objects.get(
235
                    appname=self.kwargs['connector'],
236
                    slug=self.kwargs['slug'],
237
                    pk=self.request.GET['log_id']
238
                )
239
            except (ValueError, ResourceLog.DoesNotExist):
240
                pass
232 241
        return context
233 242

  
234 243
    def get_object(self):
tests/test_manager.py
137 137
    assert resp.headers['content-type'] == 'application/javascript'
138 138
    assert resp.content.startswith(b'FooBar([{"')
139 139

  
140

  
140 141
def test_logs(app, admin_user):
141 142
    data = StringIO('1;Foo\n2;Bar\n3;Baz')
142 143
    csv = CsvDataSource.objects.create(csv_file=File(data, 't.csv'),
......
197 198

  
198 199
    resp = app.get(base_url + '12345' + '/', status=404)
199 200

  
201
    resp = app.get('/manage/csvdatasource/test/logs/?log_id=%s' % log_pk)
202
    assert 'log_target' in resp.context
203

  
204
    # unknown id
205
    resp = app.get('/manage/csvdatasource/test/logs/?log_id=0')
206
    assert 'log_target' not in resp.context
207
    # bad id
208
    resp = app.get('/manage/csvdatasource/test/logs/?log_id=foo')
209
    assert 'log_target' not in resp.context
210

  
211

  
200 212
def test_logging_parameters(app, admin_user):
201 213
    data = StringIO('1;Foo\n2;Bar\n3;Baz')
202 214
    csv = CsvDataSource.objects.create(csv_file=File(data, 't.csv'),
203
-