source: sandbox/expresso-solr/solr/example/work/jetty-0.0.0.0-8983-solr.war-_solr-any-/webapp/js/scripts/logging.js @ 7588

Revision 7588, 12.7 KB checked in by adir, 11 years ago (diff)

Ticket #000 - Adicionando a integracao de buscas com Solr na base a ser isnerida na comunidade

Line 
1/*
2 Licensed to the Apache Software Foundation (ASF) under one or more
3 contributor license agreements.  See the NOTICE file distributed with
4 this work for additional information regarding copyright ownership.
5 The ASF licenses this file to You under the Apache License, Version 2.0
6 (the "License"); you may not use this file except in compliance with
7 the License.  You may obtain a copy of the License at
8
9     http://www.apache.org/licenses/LICENSE-2.0
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16*/
17
18var loglevel_path = null;
19var frame_element = null;
20
21var logging_handler = function( response, text_status, xhr )
22{
23  var self = this;
24  var loggers = response.loggers;
25
26  var levels = '<div class="selector-holder"><div class="selector">' + "\n"
27             + '<a class="trigger"><span><em>null</em></span></a>' + "\n"
28             + '<ul>' + "\n";
29
30  for( var key in response.levels )
31  {
32    var level = response.levels[key].esc();
33    levels += '<li><a href="#" data-level="' + level + '">' + level + '</a></li>' + "\n";
34  }
35
36  levels += '<li class="unset"><a href="#" data-level="unset">UNSET</a></li>' + "\n"
37         + '</ul>' + "\n"
38         + '<a class="close"><span>[x]</span></a>' + "\n"
39         + '</div></div>';
40
41  var logger_tree = function( filter )
42  {
43    var logger_content = '';
44    var filter_regex = new RegExp( '^' + filter + '\\.\\w+$' );
45
46    for( var i in loggers )
47    {
48      var logger = loggers[i];
49      var continue_matcher = false;
50
51      if( !filter )
52      {
53        continue_matcher = logger.name.indexOf( '.' ) !== -1;
54      }
55      else
56      {
57        continue_matcher = !logger.name.match( filter_regex );
58      }
59
60      if( continue_matcher )
61      {
62        continue;
63      }
64
65      var logger_class = '';
66
67      if( logger.set )
68      {
69        logger_class = 'set';
70      }
71           
72      if( !logger.level )
73      {
74        logger_class = 'null';
75      }
76
77      var logger_name = logger.name.split( '.' );
78      var display_name = logger_name.pop();
79
80      var leaf_class = 'jstree-leaf';
81      if( logger.level )
82      {
83        leaf_class += ' level-' + logger.level.esc().toLowerCase();
84      }
85
86      logger_content += '<li class="' + leaf_class + '" data-logger="' + logger.name.esc() + '">';
87      logger_content += '<ins class="trigger jstree-icon">&nbsp;</ins>' + "\n";
88      logger_content += '<a href="#" class="trigger '+ logger_class + '"' ;
89
90      if( logger.level )
91      {
92        logger_content += 'rel="' + logger.level.esc() + '" ';
93      }
94           
95      logger_content += 'title="' + logger.name.esc() + '">' + "\n";
96
97      if( 0 !== logger_name.length )
98      {
99        logger_content += '<span class="ns">' + logger_name.join( '.' ).esc() + '.</span>';
100      }
101
102      logger_content += '<span class="name">' + display_name.esc() + '</span>' + "\n";
103      logger_content += '</a>';
104
105      logger_content += levels;
106
107      var child_logger_content = logger_tree( logger.name );
108      if( child_logger_content )
109      {
110        logger_content += '<ul>';
111        logger_content += child_logger_content;
112        logger_content += '</ul>';
113      }
114
115      logger_content += '</li>';
116    }
117
118    return logger_content;
119  };
120
121  var logger_content = '<div class="block">' + "\n"
122                     + '<h2><span>' + response.watcher.esc() + '</span></h2>' + "\n"
123                     + '<ul class="tree jstree">' + logger_tree( null ) + '</ul>' + "\n"
124                     + '</div>';
125
126  self
127    .html( logger_content );
128
129  self
130    .die( 'clear' )
131    .live
132    (
133      'clear',
134      function( event )
135      {
136        $( '.open', this )
137          .removeClass( 'open' );
138      }
139    );
140
141  $( 'li:last-child', this )
142    .addClass( 'jstree-last' );
143
144  $( 'li.jstree-leaf > a', this )
145    .each
146    (
147      function( index, element )
148      {
149        element = $( element );
150        var level = element.attr( 'rel' );
151
152        if( level )
153        {
154          var selector = $( '.selector-holder', element.closest( 'li' ) );
155
156          var trigger = $( 'a.trigger', selector );
157
158          trigger
159            .text( level.esc() );
160
161          if( element.hasClass( 'set' ) )
162          {
163            trigger.first()
164              .addClass( 'set' );
165          }
166
167          $( 'ul a[data-level="' + level + '"]', selector ).first()
168            .addClass( 'level' );
169        }
170      }
171    )
172
173  $( '.trigger', this )
174    .die( 'click' )
175    .live
176    (
177      'click',
178      function( event )
179      {
180        self.trigger( 'clear' );
181
182        $( '.selector-holder', $( this ).parents( 'li' ).first() ).first()
183          .trigger( 'toggle' );
184
185        return false;
186      }
187    );
188
189  $( '.selector .close', this )
190    .die( 'click' )
191    .live
192    (
193      'click',
194      function( event )
195      {
196        self.trigger( 'clear' );
197        return false;
198      }
199    );
200   
201  $( '.selector-holder', this )
202    .die( 'toggle')
203    .live
204    (
205      'toggle',
206      function( event )
207      {
208        var row = $( this ).closest( 'li' );
209
210        $( 'a:first', row )
211          .toggleClass( 'open' );
212
213        $( '.selector-holder:first', row )
214          .toggleClass( 'open' );
215      }
216    );
217
218  $( '.selector ul a', this )
219    .die( 'click' )
220    .live
221    (
222      'click',
223      function( event )
224      {
225        var element = $( this );
226
227        $.ajax
228        (
229          {
230            url : loglevel_path,
231            dataType : 'json',
232            data : {
233              'wt' : 'json',
234              'set' : $( this ).parents( 'li[data-logger]' ).data( 'logger' ) + ':' + element.data( 'level' )
235            },
236            type : 'POST',
237            context : self,
238            beforeSend : function( xhr, settings )
239            {
240              element
241                .addClass( 'loader' );
242            },
243            success : logging_handler
244          }
245        );
246
247        return false;
248      }
249    );
250
251};
252
253var format_time = function( time )
254{
255  time = time ? new Date( time ) : new Date();
256  return '<abbr title="' + time.toLocaleString().esc() + '">' + time.toTimeString().split( ' ' ).shift().esc() + '</abbr>';
257}
258
259var load_logging_viewer = function()
260{
261  var table = $( 'table', frame_element );
262  var state = $( '#state', frame_element );
263  var since = table.data( 'latest' ) || 0;
264  var sticky_mode = null;
265
266  $.ajax
267  (
268    {
269      url : loglevel_path + '?wt=json&since=' + since,
270      dataType : 'json',
271      beforeSend : function( xhr, settings )
272      {
273        // initial request
274        if( 0 === since )
275        {
276          sticky_mode = true;
277        }
278
279        // state element is in viewport
280        else if( state.position().top <= $( window ).scrollTop() + $( window ).height() - ( $( 'body' ).height() - state.position().top ) )
281        {
282          sticky_mode = true;
283        }
284
285        else
286        {
287          sticky_mode = false;
288        }
289      },
290      success : function( response, text_status, xhr )
291      {
292        var docs = response.history.docs;
293        var docs_count = docs.length;
294
295        var table = $( 'table', frame_element );
296
297        $( 'h2 span', frame_element )
298          .text( response.watcher.esc() );
299
300        state
301          .html( 'Last Check: ' + format_time() );
302
303        app.timeout = setTimeout
304        (
305          load_logging_viewer,
306          10000
307        );
308
309        if( 0 === docs_count )
310        {
311          table.trigger( 'update' );
312          return false;
313        }
314
315        var content = '<tbody>';
316
317        for( var i = 0; i < docs_count; i++ )
318        {
319          var doc = docs[i];
320          var has_trace = 'undefined' !== typeof( doc.trace );
321
322          doc.logger = '<abbr title="' + doc.logger.esc() + '">' + doc.logger.split( '.' ).pop().esc() + '</abbr>';
323
324          var classes = [ 'level-' + doc.level.toLowerCase().esc() ];
325          if( has_trace )
326          {
327            classes.push( 'has-trace' );
328          }
329
330          content += '<tr class="' + classes.join( ' ' ) + '">' + "\n";
331            content += '<td class="span"><a><span>' + format_time( doc.time ) + '</span></a></td>' + "\n";
332            content += '<td class="level span"><a><span>' + doc.level.esc() + '</span></span></a></td>' + "\n";
333            content += '<td class="span"><a><span>' + doc.logger + '</span></a></td>' + "\n";
334            content += '<td class="message span"><a><span>' + doc.message.replace( /,/g, ',&#8203;' ).esc() + '</span></a></td>' + "\n";
335          content += '</tr>' + "\n";
336
337          if( has_trace )
338          {
339            content += '<tr class="trace">' + "\n";
340             
341              // (1) with colspan
342              content += '<td colspan="4"><pre>' + doc.trace.esc() + '</pre></td>' + "\n";
343             
344              // (2) without colspan
345              //content += '<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>';
346              //content += '<td>' + doc.trace.esc().replace( /\n/g, '<br>' ) + '</td>' + "\n";
347
348            content += '</tr>' + "\n";
349          }
350
351        }
352
353        content += '</tbody>';
354
355        $( 'table', frame_element )
356          .append( content );
357
358        table
359          .data( 'latest', response.info.last )
360          .removeClass( 'has-data' )
361          .trigger( 'update' );
362
363        if( sticky_mode )
364        {
365          $( 'body' )
366            .animate
367            (
368                { scrollTop: state.position().top },
369                1000
370            );
371        }
372      },
373      error : function( xhr, text_status, error_thrown)
374      {
375      },
376      complete : function( xhr, text_status )
377      {
378      }
379    }
380  );
381}
382
383// #/~logging
384sammy.get
385(
386  /^#\/(~logging)$/,
387  function( context )
388  {
389    var core_basepath = $( 'li[data-basepath]', app.menu_element ).attr( 'data-basepath' );
390    loglevel_path = core_basepath + '/admin/logging';
391    var content_element = $( '#content' );
392
393    $.get
394    (
395      'tpl/logging.html',
396      function( template )
397      {
398        content_element
399          .html( template );
400
401        frame_element = $( '#frame', content_element );
402        frame_element
403          .html
404          (
405            '<div id="viewer">' + "\n" +
406              '<div class="block">' + "\n" +
407                '<h2><span>&nbsp;</span></h2>' + "\n" +
408              '</div>' + "\n" +
409              '<table border="0" cellpadding="0" cellspacing="0">' + "\n" +
410                '<thead>' + "\n" +
411                  '<tr>' + "\n" +
412                    '<th class="time">Time</th>' + "\n" +
413                    '<th class="level">Level</th>' + "\n" +
414                    '<th class="logger">Logger</th>' + "\n" +
415                    '<th class="message">Message</th>' + "\n" +
416                  '</tr>' + "\n" +
417                '</thead>' + "\n" +
418                '<tfoot>' + "\n" +
419                  '<tr>' + "\n" +
420                    '<td colspan="4">No Events available</td>' + "\n" +
421                  '</tr>' + "\n" +
422                '</thead>' + "\n" +
423              '</table>' + "\n" +
424              '<div id="state" class="loader">&nbsp;</div>' + "\n" +
425            '</div>'
426          );
427
428        var table = $( 'table', frame_element );
429
430        table
431          .die( 'update' )
432          .live
433          (
434            'update',
435            function( event )
436            {
437              var table = $( this );
438              var tbody = $( 'tbody', table );
439
440              0 !== tbody.size()
441                ? table.addClass( 'has-data' )
442                : table.removeClass( 'has-data' );
443
444              return false;
445            }
446          );
447
448        load_logging_viewer();
449
450        $( '.has-trace a', table )
451          .die( 'click' )
452          .live
453          (
454            'click',
455            function( event )
456            {
457              $( this ).closest( 'tr' )
458                .toggleClass( 'open' )
459                .next().toggle();
460
461              return false;
462            }
463          );
464      }
465    );
466  }
467);
468
469// #/~logging/level
470sammy.get
471(
472  /^#\/(~logging)\/level$/,
473  function( context )
474  {
475    var core_basepath = $( 'li[data-basepath]', app.menu_element ).attr( 'data-basepath' );
476    loglevel_path = core_basepath + '/admin/logging';
477    var content_element = $( '#content' );
478
479    $.get
480    (
481      'tpl/logging.html',
482      function( template )
483      {
484        content_element
485          .html( template );
486
487        $( '#menu a[href="' + context.path + '"]' )
488          .parent().addClass( 'active' );
489                     
490        $.ajax
491        (
492          {
493            url : loglevel_path + '?wt=json',
494            dataType : 'json',
495            context : $( '#frame', content_element ),
496            beforeSend : function( xhr, settings )
497            {
498              this
499                .html( '<div class="loader">Loading ...</div>' );
500            },
501            success : logging_handler
502          }
503        );
504      }
505    );
506  }
507);
Note: See TracBrowser for help on using the repository browser.