Haproxy Statistics Report

修改Haproxy状态页中的流量信息

目前为 2016-11-05 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Haproxy Statistics Report
  3. // @namespace 4e29d21a-e289-411d-9549-e2a8906a3cf1
  4. // @version 2016.11.5.1
  5. // @icon http://www.haproxy.org/img/logo-med.png
  6. // @description 修改Haproxy状态页中的流量信息
  7. // @author Dennis(tossp.com)
  8. // @include http*://*:1188/*
  9. // @run-at document-idle
  10. // @grant none
  11. // @require https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js
  12. // @supportURL https://gist.github.com/tossp/de260df461c54a56485f07587471be88
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17. var patterns = {};
  18. patterns.ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/;
  19. patterns.dn = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$$/;
  20.  
  21. if ($('h1 a').attr('href')=='http://www.haproxy.org/'){
  22. $('body > form > table > tbody > tr').each(function(k,v) {
  23. var inElem,outElem;
  24.  
  25. window.ts=v;
  26. if ($(v).children("td:eq(2)").attr('colspan')){
  27. inElem=$(v).children("td:eq(12)");
  28. outElem=$(v).children("td:eq(13)");
  29. }else{
  30. inElem=$(v).children("td:eq(14)");
  31. outElem=$(v).children("td:eq(15)");
  32. }
  33. //console.info(inElem.html(),outElem.html());
  34. //.css('background-color', '#20a0ff')
  35. inElem.html(size(inElem.text()));
  36. outElem.html(size(outElem.text()));
  37. });
  38. $('table tbody tr td a.lfsb').each(function(k,v) {
  39. addrLookUp(v.text,v);
  40. });
  41.  
  42. }
  43. function addrLookUp(addr,elem){
  44. var addrSplit=addr.split('.');
  45. if (verify(addr,'ip')){
  46. getGOE(addr,function(data){
  47. elem.text=data.country+data.city;
  48. elem.text='['+addrSplit[addrSplit.length-1]+']'+elem.text;
  49. });
  50. }else if(verify(addr,'dn')){
  51. getGOE(addr,function(data){
  52. elem.text=data.country+data.city;
  53. elem.text='['+addrSplit[0]+']'+'['+data.query.split('.')[3]+']'+elem.text;
  54. });
  55. }
  56. }
  57. function getGOE(addr,func){
  58. $.getJSON('http://ip-api.com/json/'+addr,{lang:'zh-CN'},function(data){
  59. if($.isFunction(func)){
  60. if (data.status!='success'){
  61. console.info(addr,data);
  62. }else{
  63. func(data);
  64. }
  65. }
  66. });
  67. }
  68.  
  69. function size(kb){
  70. var tmp = kb;
  71. if (tmp.indexOf('Response bytes')!=-1){
  72. tmp = tmp.substr(0,tmp.indexOf('Response bytes'));
  73. }
  74. if (!isNaN(tmp)&&parseInt(tmp)>0){
  75. if (tmp < 1024 ) {
  76. tmp = parseFloat(tmp).toFixed(2) + ' B';
  77. } else if ( tmp >= 1024 && tmp < 1048576 ) {
  78. tmp = parseFloat(tmp / 1024).toFixed(2) + ' Kb';
  79. } else if ( tmp >= 1048576 && tmp < 1073741824 ) {
  80. tmp = parseFloat(tmp / (1024 * 1024)).toFixed(2) + ' Mb';
  81. } else {
  82. tmp = parseFloat(tmp / (1024 * 1024 * 1024)).toFixed(2) + ' Gb';
  83. }
  84. }else{
  85. return kb;
  86. }
  87. return tmp;
  88.  
  89.  
  90. }
  91. function verify(str,pat){
  92. var thePat = patterns[pat];
  93. if(thePat.test(str)){
  94. return true;
  95. }else{
  96. return false;
  97. }
  98. }
  99.  
  100. })();