app.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var socket,keepalive;
  2. var opt = {debug:1,log:1,warning:1,error:1,maxLine:1000};
  3. // var scroll = 1;
  4. function connect(){
  5. $('.host,.port').attr('disabled','true').addClass('disabled');
  6. var host = $('.host').val(),port = $('.port').val();
  7. if(!host) host = '127.0.0.1';
  8. if(!port) port = 4002;
  9. socket = io('http://'+host+':'+port);
  10. socket.on('connect_error',function(){
  11. alert('Socket connect error!');
  12. disconnect();
  13. });
  14. socket.on('connect', function(){
  15. keepalive = setInterval(function(){socket.emit('keepalive',true);},1000);
  16. $('.connect button').text('Disconnect').addClass('disabled');
  17. });
  18. socket.on('push', function(data){
  19. addBox(data);
  20. });
  21. socket.on('disconnect', function(){
  22. disconnect();
  23. });
  24. }
  25. function disconnect(){
  26. if(socket){
  27. socket.destroy();
  28. socket = null;
  29. }
  30. if(keepalive){
  31. clearInterval(keepalive);
  32. keepalive = null;
  33. }
  34. $('.host,.port').removeAttr('disabled').removeClass('disabled');
  35. $('.connect button').text('Connect').removeClass('disabled');
  36. }
  37. function addBox(data){
  38. var levelClass,output=data.data,msg;
  39. data.level=="0"?levelClass='LOG':data.level=="1"?levelClass='DEBUG':data.level=="2"?levelClass='WARNING':data.level=="3"?levelClass='ERROR':'';
  40. if((levelClass=='LOG'&&opt.log==0)||(levelClass=='DEBUG'&&opt.debug==0)||(levelClass=='WARNING'&&opt.warning==0)||(levelClass=='ERROR'&&opt.error==0)) return;
  41. msg = output.msg?output.msg:output.data;
  42. var pid = parseInt(data.pid);
  43. pid = pid.toString(36);
  44. var filterPid = $('.filter .pid').val();
  45. var dom = $('<div class="box '+levelClass+'" data-pid="'+pid+'"><div class="head"><span class="level">'+levelClass+'</span><h2>'+output.backtrace.file+'</h2><span class="line">'+output.backtrace.line+' 行</span></div><div class="content"><pre>'+msg+'</pre></div><div class="info">PID: '+pid+'<span>'+data._t+'</span></div></div>');
  46. if($('.list .box').length>=opt.maxLine){$('.list .box:eq(0)').remove();}
  47. if(filterPid!='' && filterPid!=pid) dom.hide();
  48. $('.list').append(dom);
  49. }
  50. $(function(){
  51. $('.connect button').click(function(){
  52. if(socket){
  53. disconnect();
  54. }else{
  55. connect();
  56. }
  57. });
  58. $('.filter span').click(function(){
  59. var type = $(this).attr('data-type');
  60. if(opt[type]){
  61. opt[type]=0;
  62. $(this).addClass('disabled');
  63. }else{
  64. opt[type]=1;
  65. $(this).removeClass('disabled');
  66. }
  67. });
  68. $('.filter button').click(function(){
  69. var pid = $('.filter .pid').val();
  70. if(pid==''){
  71. $('.list .box').show();
  72. }else{
  73. $('.list .box[data-pid!='+pid+']').hide();
  74. }
  75. });
  76. $('.clearList').click(function(){
  77. $('.list').empty();
  78. });
  79. });