index.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. function formatDate(time) {
  2. var date = new Date(time);
  3.   var YY = date.getFullYear() + '-';
  4.   var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  5.   var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
  6.   var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
  7.   var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
  8.   var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
  9.   return YY + MM + DD +" "+hh + mm + ss;
  10. }
  11. // 查看详细数据
  12. function bindQueryDataDetailEvent() {
  13. var $queryData = $(".queryData");
  14. $queryData.unbind("click");
  15. $queryData.click(function () {
  16. var json = $(this).parent().find("div").text();
  17. var html = '<div class="row driver_break_word">' + json + '</div>';
  18. BootstrapDialog.show({
  19. title: "注意信息安全",
  20. type: BootstrapDialog.TYPE_INFO,
  21. message: html,
  22. size: BootstrapDialog.SIZE_NORMAL,
  23. buttons: [{
  24. label: "关闭",
  25. action: function (dialog) {
  26. dialog.close();
  27. }
  28. }]
  29. });
  30. });
  31. }
  32. // 查看详细数据日志
  33. function bindQueryErrorDetailEvent() {
  34. var $queryData = $(".queryError");
  35. $queryData.unbind("click");
  36. $queryData.click(function () {
  37. var json = $(this).text();
  38. var html = '<div class="row driver_break_word">' + json + '</div>';
  39. BootstrapDialog.show({
  40. title: "异常详细",
  41. type: BootstrapDialog.TYPE_INFO,
  42. message: html,
  43. size: BootstrapDialog.SIZE_NORMAL,
  44. buttons: [{
  45. label: "关闭",
  46. action: function (dialog) {
  47. dialog.close();
  48. }
  49. }]
  50. });
  51. });
  52. }
  53. // 清空数据
  54. function bindClearEvent($btn, $title, $msg, $url){
  55. $btn.click(function () {
  56. var $id = $(this).attr("id");
  57. var data = {"id": $id};
  58. BootstrapDialog.show({
  59. title: "警告",
  60. type: BootstrapDialog.TYPE_DANGER,
  61. message: $title,
  62. size: BootstrapDialog.SIZE_NORMAL,
  63. buttons: [{
  64. label: "确定",
  65. action: function (dialog) {
  66. doPoster($url, data, function (data) {
  67. if (data.success == true) {
  68. bootGrowl($msg, "success");
  69. doLoader('/monitor?id=' + $id);
  70. } else {
  71. bootGrowl(data.resultValue, "danger");
  72. }
  73. });
  74. dialog.close();
  75. }
  76. }, {
  77. label: "取消",
  78. action: function (dialog) {
  79. dialog.close();
  80. }
  81. }]
  82. });
  83. });
  84. }
  85. // 显示更多
  86. function showMore($this, $url, $params, $call){
  87. $params.pageNum = parseInt($this.attr("num")) + 1;
  88. $params.pageSize = 10;
  89. doGetter($url, $params, function (data) {
  90. if (data.success == true) {
  91. if(data.resultValue.data.length > 0){
  92. $this.attr("num", $params.pageNum);
  93. }
  94. $call(data.resultValue);
  95. } else {
  96. bootGrowl(data.resultValue, "danger");
  97. }
  98. });
  99. }
  100. // 查看数据
  101. function bindQueryDataEvent() {
  102. $("#queryDataBtn").click(function () {
  103. var keyword = $("#searchDataKeyword").val();
  104. var id = $("#searchMetaData").select2("val");
  105. var success = $("#searchDataSuccess").select2("val");
  106. doGetter('/monitor/queryData', {"error": keyword, "success": success, "id" : id, "pageNum" : 1, "pageSize" : 10}, function (data) {
  107. if (data.success == true) {
  108. refreshDataList(data.resultValue);
  109. } else {
  110. bootGrowl(data.resultValue, "danger");
  111. }
  112. });
  113. });
  114. }
  115. function bindQueryDataMoreEvent() {
  116. $("#queryDataMore").click(function () {
  117. var keyword = $("#searchDataKeyword").val();
  118. var id = $("#searchMetaData").select2("val");
  119. var success = $("#searchDataSuccess").select2("val");
  120. showMore($(this), '/monitor/queryData', {"error": keyword, "success": success, "id" : id}, function(resultValue){
  121. refreshDataList(resultValue, true)
  122. });
  123. });
  124. }
  125. function refreshDataList(resultValue, append){
  126. var $dataList = $("#dataList");
  127. var $dataTotal = $("#dataTotal");
  128. var html = showData($dataList, resultValue.data, append);
  129. if(append){
  130. $dataList.append(html);
  131. }else{
  132. $dataList.html(html);
  133. $("#queryDataMore").attr("num", 1);
  134. }
  135. $dataTotal.html(resultValue.total);
  136. bindQueryDataDetailEvent();
  137. bindQueryErrorDetailEvent();
  138. }
  139. function showData($dataList, arr, append){
  140. var html = '';
  141. var size = arr.length;
  142. if(size > 0){
  143. var start = append ? $dataList.find("tr").size() : 0;
  144. for(i = 0; i < size; i++) {
  145. html += '<tr>';
  146. html += '<td>' + (start + i + 1) + '</td>';
  147. html += '<td>' + arr[i].event + '</td>';
  148. html += '<td>' + (arr[i].success ? '<span class="label label-success">成功</span>' : '<span class="label label-warning">失败</span>') + '</td>';
  149. html += '<td style="max-width:100px;" class="dbsyncer_over_hidden"><a href="javascript:;" class="dbsyncer_pointer queryError">' + arr[i].error + '</a></td>';
  150. html += '<td>' + formatDate(arr[i].createTime) + '</td>';
  151. html += '<td><a href="javascript:;" class="label label-info queryData">查看数据</a><div class="hidden">' + arr[i].json + '</div></td>';
  152. html += '</tr>';
  153. }
  154. }
  155. return html;
  156. }
  157. // 查看日志
  158. function bindQueryLogEvent() {
  159. $("#queryLogBtn").click(function () {
  160. var keyword = $("#searchLogKeyword").val();
  161. doGetter('/monitor/queryLog', {"json": keyword, "pageNum" : 1, "pageSize" : 10}, function (data) {
  162. if (data.success == true) {
  163. refreshLogList(data.resultValue);
  164. } else {
  165. bootGrowl(data.resultValue, "danger");
  166. }
  167. });
  168. });
  169. }
  170. function bindQueryLogMoreEvent() {
  171. $("#queryLogMore").click(function () {
  172. var keyword = $("#searchLogKeyword").val();
  173. showMore($(this), '/monitor/queryLog', {"json": keyword}, function(resultValue){
  174. refreshLogList(resultValue, true)
  175. });
  176. });
  177. }
  178. function refreshLogList(resultValue, append){
  179. var $logList = $("#logList");
  180. var $logTotal = $("#logTotal");
  181. var html = showLog($logList, resultValue.data, append);
  182. if(append){
  183. $logList.append(html);
  184. }else{
  185. $logList.html(html);
  186. $("#queryLogMore").attr("num", 1);
  187. }
  188. $logTotal.html(resultValue.total);
  189. }
  190. function showLog($logList, arr, append){
  191. var size = arr.length;
  192. var html = '';
  193. if(size > 0){
  194. var start = append ? $logList.find("tr").size() : 0;
  195. for(i = 0; i < size; i++) {
  196. html += '<tr>';
  197. html += '<td>' + (start + i + 1) + '</td>';
  198. html += '<td>' + arr[i].json + '</td>';
  199. html += '<td>' + formatDate(arr[i].createTime) + '</td>';
  200. html += '</tr>';
  201. }
  202. }
  203. return html;
  204. }
  205. // 堆积数据
  206. function showQueueChart(taskNumber){
  207. var option={
  208. title:{
  209. text:"堆积数据",
  210. x:'center',
  211. y: 'top'
  212. },
  213. tooltip : {
  214. formatter: "{a}: {c}",
  215. position: 'top'
  216. },
  217. series: [
  218. {
  219. name: "待处理",
  220. animation: true,
  221. type: 'gauge',
  222. min: 0,
  223. max: 1000,
  224. splitNumber: 5,
  225. axisLine: { // 坐标轴线
  226. lineStyle: { // 属性lineStyle控制线条样式
  227. color: [[0.1, '#d9534f'], [0.3, '#f0ad4e'],[0.8, '#5bc0de'],[1, '#5cb85c']],
  228. width: 10
  229. }
  230. },
  231. axisTick: { // 坐标轴小标记
  232. length: 15, // 属性length控制线长
  233. lineStyle: { // 属性lineStyle控制线条样式
  234. color: 'auto'
  235. }
  236. },
  237. splitLine: { // 分隔线
  238. length: 20, // 属性length控制线长
  239. lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式
  240. color: 'auto'
  241. }
  242. },
  243. detail: {fontSize:12, offsetCenter:[0,'65%']},
  244. data: [{value: taskNumber, name: ''}]
  245. }
  246. ]
  247. };
  248. echarts.init(document.getElementById('queueChart')).setOption(option);
  249. }
  250. // 事件分类
  251. function showEventChart(ins, upd, del){
  252. var option = {
  253. title : {
  254. show:true,
  255. text: '事件分类',
  256. x:'center',
  257. y: 'top'
  258. },
  259. tooltip : {
  260. trigger: 'item',
  261. formatter: "{b} : {c}"
  262. },
  263. series : [
  264. {
  265. type:'pie',
  266. color: function(params) {
  267. // build a color map as your need.
  268. var colorList = [
  269. '#60C0DD','#F0805A','#89DFAA'
  270. ];
  271. return colorList[params.dataIndex]
  272. },
  273. label:{
  274. normal:{
  275. show:true,
  276. position:'inner',
  277. formatter:'{d}%'
  278. }
  279. },
  280. data:[
  281. {value:upd, name:'更新'},
  282. {value:del, name:'删除'},
  283. {value:ins, name:'插入'}
  284. ]
  285. }
  286. ]
  287. };
  288. echarts.init(document.getElementById('eventChart')).setOption(option);
  289. }
  290. // 统计成功失败
  291. function showTotalChart(success, fail){
  292. var option = {
  293. title : {
  294. show:true,
  295. text: '已完成数据',
  296. x:'center',
  297. y: 'top'
  298. },
  299. tooltip : {
  300. trigger: 'item',
  301. formatter: "{b} : {c}"
  302. },
  303. series : [
  304. {
  305. type:'pie',
  306. color: function(params) {
  307. // build a color map as your need.
  308. var colorList = [
  309. '#60C0DD','#F0805A'
  310. ];
  311. return colorList[params.dataIndex]
  312. },
  313. label:{
  314. normal:{
  315. show:true,
  316. position:'inner',
  317. formatter:'{d}%'
  318. }
  319. },
  320. data:[
  321. {value:success, name:'成功'},
  322. {value:fail, name:'失败'}
  323. ]
  324. }
  325. ]
  326. };
  327. echarts.init(document.getElementById('totalChart')).setOption(option);
  328. }
  329. $(function () {
  330. // 初始化select2插件
  331. $(".select-control").select2({
  332. width: "100%",
  333. theme: "classic"
  334. });
  335. // 连接器类型切换事件
  336. $("#searchMetaData").change(function () {
  337. var $id = $(this).val();
  338. doLoader('/monitor?id=' + $id);
  339. });
  340. // 数据状态切换事件
  341. $("#searchDataSuccess").change(function () {
  342. $("#queryDataBtn").click();
  343. });
  344. bindQueryLogEvent();
  345. bindQueryLogMoreEvent();
  346. bindQueryDataEvent();
  347. bindQueryDataMoreEvent();
  348. bindQueryDataDetailEvent();
  349. bindQueryErrorDetailEvent();
  350. bindClearEvent($(".clearDataBtn"), "确认清空数据?", "清空数据成功!", "/monitor/clearData");
  351. bindClearEvent($(".clearLogBtn"), "确认清空日志?", "清空日志成功!", "/monitor/clearLog");
  352. doGetWithoutLoading("/monitor/queryAppReportMetric",{}, function (data) {
  353. if (data.success == true) {
  354. var report = data.resultValue;
  355. showTotalChart(report.success, report.fail);
  356. showEventChart(report.insert, report.update, report.delete);
  357. showQueueChart(report.taskNumber);
  358. } else {
  359. bootGrowl(data.resultValue, "danger");
  360. }
  361. });
  362. // 绑定回车事件
  363. $("#searchDataKeyword").keydown(function (e) {
  364. if (e.which == 13) {
  365. $("#queryDataBtn").trigger("click");
  366. }
  367. });
  368. $("#searchLogKeyword").keydown(function (e) {
  369. if (e.which == 13) {
  370. $("#queryLogBtn").trigger("click");
  371. }
  372. });
  373. });