data.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. define(['jquery', 'bootstrap', 'backend', 'addtabs', 'table', 'echarts', 'echarts-theme', 'template'], function ($, undefined, Backend, Datatable, Table, Echarts, undefined, Template) {
  2. var Controller = {
  3. index: function () {
  4. $(".datetimerange").data('callback', function (start, end) {
  5. loadData(start / 1000, end / 1000);
  6. });
  7. if ($(".datetimerange").size() > 0) {
  8. require(['bootstrap-daterangepicker'], function () {
  9. var ranges = {};
  10. ranges[__('Today')] = [Moment().startOf('day'), Moment().endOf('day')];
  11. ranges[__('Yesterday')] = [Moment().subtract(1, 'days').startOf('day'), Moment().subtract(1, 'days').endOf('day')];
  12. ranges[__('Last 7 Days')] = [Moment().subtract(6, 'days').startOf('day'), Moment().endOf('day')];
  13. ranges[__('Last 30 Days')] = [Moment().subtract(29, 'days').startOf('day'), Moment().endOf('day')];
  14. ranges[__('This Month')] = [Moment().startOf('month'), Moment().endOf('month')];
  15. ranges[__('Last Month')] = [Moment().subtract(1, 'month').startOf('month'), Moment().subtract(1, 'month').endOf('month')];
  16. var options = {
  17. dateLimit: { months: 2 },
  18. timePicker: true,
  19. autoUpdateInput: false,
  20. timePickerSeconds: true,
  21. timePicker24Hour: true,
  22. autoApply: true,
  23. locale: {
  24. format: 'YYYY/MM/DD HH:mm:ss',
  25. customRangeLabel: __("Custom Range"),
  26. applyLabel: __("Apply"),
  27. cancelLabel: __("Clear"),
  28. },
  29. ranges: ranges,
  30. };
  31. var origincallback = function (start, end) {
  32. $(this.element).val(start.format(this.locale.format) + " - " + end.format(this.locale.format));
  33. $(this.element).trigger('blur');
  34. };
  35. $(".datetimerange").each(function () {
  36. var callback = typeof $(this).data('callback') == 'function' ? $(this).data('callback') : origincallback;
  37. $(this).on('apply.daterangepicker', function (ev, picker) {
  38. origincallback.call(picker, picker.startDate, picker.endDate);
  39. });
  40. $(this).on('cancel.daterangepicker', function (ev, picker) {
  41. $(this).val('').trigger('blur');
  42. });
  43. $(this).daterangepicker($.extend(true, options, $(this).data()), callback);
  44. });
  45. });
  46. }
  47. //datafilter
  48. $(document).on('click', '.datefilter .btn', function (e) {
  49. var type = $(this).data('type');
  50. var startDate = Moment().startOf('day').unix();
  51. var endDate = Moment().unix();
  52. switch (type) {
  53. case 0:
  54. endDate = Moment().endOf('day').unix();
  55. break;
  56. case 1:
  57. startDate = Moment().subtract(15, 'minutes').unix();
  58. break;
  59. case 2:
  60. startDate = Moment().subtract(30, 'minutes').unix();
  61. break;
  62. case 3:
  63. startDate = Moment().subtract(1, 'hours').unix();
  64. break;
  65. case 4:
  66. startDate = Moment().subtract(4, 'hours').unix();
  67. break;
  68. case 5:
  69. startDate = Moment().subtract(12, 'hours').unix();
  70. break;
  71. case 6:
  72. startDate = Moment().subtract(1, 'days').unix();
  73. break;
  74. default:
  75. break;
  76. }
  77. loadData(startDate, endDate);
  78. });
  79. var codeChart = Echarts.init(document.getElementById('code-chart'), 'dark');
  80. var codeoption = {
  81. title: {
  82. text: '请求状态码',
  83. left: 'left'
  84. },
  85. tooltip: {
  86. trigger: 'item',
  87. formatter: '{a} <br/>{b} : {c} ({d}%)'
  88. },
  89. legend: {
  90. type: 'scroll',
  91. orient: 'vertical',
  92. right: 10,
  93. top: 20,
  94. bottom: 20,
  95. data: ['a', 'b', 'c'],
  96. },
  97. series: [
  98. {
  99. name: '请求状态码',
  100. type: 'pie',
  101. radius: '55%',
  102. center: ['40%', '50%'],
  103. data: [{ 'name': 'a', value: 1 }, { 'name': 'b', value: 2 }, { 'name': 'c', value: 3 }],
  104. emphasis: {
  105. itemStyle: {
  106. shadowBlur: 10,
  107. shadowOffsetX: 0,
  108. shadowColor: 'rgba(0, 0, 0, 0.5)'
  109. }
  110. }
  111. }
  112. ]
  113. };
  114. codeChart.setOption(codeoption);
  115. var timeChart = Echarts.init(document.getElementById('time-chart'),'dark');
  116. var timeoption = {
  117. title: {
  118. text: '请求处理时间(ms)',
  119. left: 'left'
  120. },
  121. tooltip: {
  122. trigger: 'item',
  123. formatter: '{a} <br/>{b} : {c} ({d}%)'
  124. },
  125. legend: {
  126. type: 'scroll',
  127. orient: 'vertical',
  128. right: 10,
  129. top: 20,
  130. bottom: 20,
  131. data: ['a', 'b', 'c'],
  132. },
  133. series: [
  134. {
  135. name: '请求处理时间(ms)',
  136. type: 'pie',
  137. radius: '55%',
  138. center: ['40%', '50%'],
  139. data: [{ 'name': 'a', value: 1 }, { 'name': 'b', value: 2 }, { 'name': 'c', value: 3 }],
  140. emphasis: {
  141. itemStyle: {
  142. shadowBlur: 10,
  143. shadowOffsetX: 0,
  144. shadowColor: 'rgba(0, 0, 0, 0.5)'
  145. }
  146. }
  147. }
  148. ]
  149. };
  150. timeChart.setOption(timeoption);
  151. var requestChart = Echarts.init(document.getElementById('request-chart'),'dark');
  152. var requestoption = {
  153. title: {
  154. text: '最多请求 TOP15',
  155. },
  156. tooltip: {
  157. trigger: 'axis',
  158. axisPointer: {
  159. type: 'shadow'
  160. }
  161. },
  162. grid: {
  163. left: '3%',
  164. right: '4%',
  165. bottom: '3%',
  166. containLabel: true
  167. },
  168. xAxis: {
  169. type: 'value',
  170. boundaryGap: [0, 0.01]
  171. },
  172. yAxis: {
  173. inverse: true,
  174. type: 'category',
  175. data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)']
  176. },
  177. series: [
  178. {
  179. name: '次数',
  180. type: 'bar',
  181. data: [18203, 23489, 29034, 104970, 131744, 630230]
  182. }
  183. ]
  184. };
  185. requestChart.setOption(requestoption);
  186. var errorChart = Echarts.init(document.getElementById('error-chart'), 'dark');
  187. var erroroption = {
  188. title: {
  189. text: '请求错误 TOP15',
  190. },
  191. tooltip: {
  192. trigger: 'axis',
  193. axisPointer: {
  194. type: 'shadow'
  195. }
  196. },
  197. grid: {
  198. left: '3%',
  199. right: '4%',
  200. bottom: '3%',
  201. containLabel: true
  202. },
  203. xAxis: {
  204. type: 'value',
  205. boundaryGap: [0, 0.01]
  206. },
  207. yAxis: {
  208. inverse: true,
  209. type: 'category',
  210. data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)']
  211. },
  212. series: [
  213. {
  214. name: '次数',
  215. type: 'bar',
  216. data: [18203, 23489, 29034, 104970, 131744, 630230]
  217. }
  218. ]
  219. };
  220. errorChart.setOption(erroroption);
  221. var fastChart = Echarts.init(document.getElementById('fast-chart'), 'dark');
  222. var fastoption = {
  223. title: {
  224. text: '平均处理时间最快 TOP15',
  225. },
  226. tooltip: {
  227. trigger: 'axis',
  228. axisPointer: {
  229. type: 'shadow'
  230. }
  231. },
  232. grid: {
  233. left: '3%',
  234. right: '4%',
  235. bottom: '3%',
  236. containLabel: true
  237. },
  238. xAxis: {
  239. type: 'value',
  240. boundaryGap: [0, 0.01]
  241. },
  242. yAxis: {
  243. inverse: true,
  244. type: 'category',
  245. data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)']
  246. },
  247. series: [
  248. {
  249. name: '耗时',
  250. type: 'bar',
  251. data: [18203, 23489, 29034, 104970, 131744, 630230]
  252. }
  253. ]
  254. };
  255. fastChart.setOption(fastoption);
  256. var slowChart = Echarts.init(document.getElementById('slow-chart'), 'dark');
  257. var slowoption = {
  258. title: {
  259. text: '平均处理时间最慢 TOP15',
  260. },
  261. tooltip: {
  262. trigger: 'axis',
  263. axisPointer: {
  264. type: 'shadow'
  265. }
  266. },
  267. grid: {
  268. left: '3%',
  269. right: '4%',
  270. bottom: '3%',
  271. containLabel: true
  272. },
  273. xAxis: {
  274. type: 'value',
  275. boundaryGap: [0, 0.01]
  276. },
  277. yAxis: {
  278. inverse: true,
  279. type: 'category',
  280. data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)']
  281. },
  282. series: [
  283. {
  284. name: '耗时',
  285. type: 'bar',
  286. data: [18203, 23489, 29034, 104970, 131744, 630230]
  287. }
  288. ]
  289. };
  290. slowChart.setOption(slowoption);
  291. var loadData = function (start, end) {
  292. $('#createtime').val(Moment(start * 1000).format('YYYY/MM/DD HH:mm:ss') + ' - ' + Moment(end * 1000).format('YYYY/MM/DD HH:mm:ss'));
  293. $.post('apilog/data/index', { start: start, end: end }, function (res) {
  294. $('#bs_request').text(res.base.count_request);
  295. $('#bs_time').text(res.base.avg_time.toFixed(2));
  296. $('#bs_404').text(res.base.count_404);
  297. $('#bs_500').text(res.base.count_500);
  298. $('#bs_error').text((res.base.error_rank * 100).toFixed(2) + '%');
  299. $('#bs_api').text(res.base.count_api);
  300. codeoption.legend.data = res.code.x;
  301. codeoption.series[0].data = res.code.kv;
  302. codeChart.setOption(codeoption);
  303. timeoption.legend.data = res.time.x;
  304. timeoption.series[0].data = res.time.kv;
  305. timeChart.setOption(timeoption);
  306. requestoption.yAxis.data = res.requesttop.x;
  307. requestoption.series[0].data = res.requesttop.y;
  308. requestChart.setOption(requestoption);
  309. erroroption.yAxis.data = res.errortop.x;
  310. erroroption.series[0].data = res.errortop.y;
  311. errorChart.setOption(erroroption);
  312. fastoption.yAxis.data = res.fasttop.x;
  313. fastoption.series[0].data = res.fasttop.y;
  314. fastChart.setOption(fastoption);
  315. slowoption.yAxis.data = res.slowtop.x;
  316. slowoption.series[0].data = res.slowtop.y;
  317. slowChart.setOption(slowoption);
  318. })
  319. };
  320. loadData(Moment().startOf('day').unix(), Moment().endOf('day').unix());
  321. }
  322. };
  323. return Controller;
  324. });