热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HighchartsStock实时图表监控JS

为什么80%的码农都做不了架构师?第一次加载时从数据库中抽取监控数据,JS生成昨天及上周同天的对比数据。每分钟动态更新图表。varbistockb

为什么80%的码农都做不了架构师?>>>   hot3.png

第一次加载时从数据库中抽取监控数据,JS生成昨天及上周同天的对比数据。 每分钟动态更新图表。

224624_oIK6_1453775.png

var bistock = bistock || {};
$(function () { var seriesOptions &#61; [], // 历史对比曲线 0当前&#xff0c;1昨天&#xff0c;7上周periods &#61; [0, 1, 7], impl, config,seriesCount &#61; 0, charts &#61; [],get_data_url &#61; false,update_url &#61; false;impl &#61; { config_chart: function() {Highcharts.setOptions({ colors: [&#39;#DDDF00&#39;, &#39;#058DC7&#39;, &#39;#50B432&#39;, &#39;#ED561B&#39;, &#39;#24CBE5&#39;, &#39;#64E572&#39;, &#39;#FF9655&#39;, &#39;#FFF263&#39;, &#39;#6AF9C4&#39;],global: { useUTC: false  } }); }, debug: function(msg, vars) {console.log(msg);if(vars) {$.each(vars, function(i, v) {console.log(i&#43;&#39;:&#39;&#43;v);});}},/*** 生成监控图表* &#64;id 图表id* &#64;div 图表渲染的div*/generate_chart: function(id, div) { var tmp_count &#61; 0;$.ajax({type: "get",async: false,data: {menuid: id},url: get_data_url,dataType: "json",success: function (response) {$.each(response.rs, function (series_name, item) {  // 添加历史对比数据 $.each(periods, function (j, period) { seriesOptions[seriesCount] &#61; {name: impl.get_series_name(period) &#43; series_name,data: (period &#61;&#61;&#61; 0) ? item.data : impl.get_series_data(item.data, period),type: &#39;spline&#39;,lineWidth: (seriesCount &#61;&#61; 0 || seriesCount &#61;&#61; 3) ? 4 : 2};impl.debug("Series info: ", {&#39;name&#39;:seriesOptions[seriesCount][&#39;name&#39;], &#39;number&#39;: seriesCount});seriesCount&#43;&#43;;});  });impl.createChart(seriesOptions, div, id); seriesOptions &#61; [];seriesCount &#61; 0;},error: function(){alert(&#39;Fail to render to chart &#39;&#43;id);}});},/*** 获取图表曲线的名称* &#64;period 图表曲线周期0,1,7*/get_series_name: function (period) { return (period &#61;&#61; 0) ? &#39;当天&#39; : ((period &#61;&#61; 1) ? &#39;昨天&#39; : &#39;上周同天&#39;);},/*** 获取图表的数据* &#64;data 原始数据* &#64;period 图表曲线周期0,1,7*/get_series_data: function (data, period) {            var new_series_data &#61; [],time_offset &#61; period * 86400 * 1000,now &#61; (new Date()).getTime();            $.each(data, function (i, item) {// 删除某段时间的数据&#xff0c;然后整体偏移.var point_data;if (item[0]&#43;time_offset < now&#43;8*3600*1000-600*1000) {new_series_data[i] &#61; [item[0] &#43; time_offset, item[1]];}                }); return new_series_data;},/*** 动态更新图表 */updateChart: function(menuid) {setInterval(function() { $.ajax({url: update_url,type: &#39;GET&#39;,data: {menuid: menuid},async: false,contentType: "application/json; charset&#61;utf-8",dataType: &#39;JSON&#39;,success: function(response) { if (!response.rs) {impl.debug(&#39;No Data&#39;); impl.debug("Chart Info: ",{&#39;menuid&#39;: menuid, &#39;time&#39;: response.happen_time});return;}impl.debug("Chart Info: ",{&#39;menuid&#39;: menuid, &#39;time&#39;: response.happen_time}); var updateCount &#61; 0;      $.each(response.data, function(i, items){$.each(items, function(j, item) { impl.debug("Series info: ", {&#39;data&#39;: item, &#39;number&#39;: updateCount});charts[menuid].series[updateCount].addPoint(item, true, true); updateCount&#43;&#43;; });});updateCount &#61; 0;},cache: false}); }, 60000); },/*** 从缓存中读取历史数据* &#64;id menuid* &#64;period 1,7* &#64;num 数据序列 0,1,2...* &#64;size 曲线的大小* &#64;time 当期时间* &#64;return 返回一个点的数据*/get_history_point: function(id, period, num, size, time) { var idx &#61; (size &#61;&#61; 1) ? 0 : num;var tmp_size &#61; cacheData[id][idx].length;// fix the timevar tmp_point_data &#61; cacheData[id][idx][tmp_size-period*144&#43;1][1]; return [time, tmp_point_data];},rand_point: function(max) {var x &#61; (new Date()).getTime(), // current timey &#61; Math.round(Math.random() * max);return [x,y];},/*** 创建图表* &#64;seriesData 图表数据* &#64;div 渲染到div* &#64;id 图表的唯一id  */createChart: function (seriesData,div,id) {charts[id] &#61; new Highcharts.StockChart({chart: { animation: Highcharts.svg, marginRight: 10,renderTo: div,events: {load: impl.updateChart(id)}}, colors: (config[&#39;colors&#39;]) ? config[&#39;colors&#39;] : [&#39;#AA4643&#39;,&#39;#4572A7&#39;,&#39;#89A54E&#39;,&#39;#80699B&#39;,&#39;#3D96AE&#39;,&#39;#DB843D&#39;,&#39;#92A8CD&#39;,&#39;#A47D7C&#39;,&#39;#B5CA92&#39;],rangeSelector: {buttons: [{count: 1,type: &#39;hour&#39;,text: &#39;1h&#39;},{count: 8,type: &#39;hour&#39;,text: &#39;8h&#39;}, {count: 1,type: &#39;day&#39;,text: &#39;1d&#39;}, {count: 1,type: &#39;week&#39;,text: &#39;1w&#39;},{count: 1,type: &#39;month&#39;,text: &#39;1m&#39;},{count: 3,type: &#39;month&#39;,text: &#39;3m&#39;},{type: &#39;all&#39;,text: &#39;All&#39;}],inputEnabled: false,selected: 1},legend: {borderWidth: 0,enabled: true},yAxis: {                   min: 0,plotLines: [{value: 0,width: 2,color: &#39;silver&#39;}],labels: {enabled: config[&#39;isEnabled&#39;] }},plotOptions: {series: {//compare: &#39;percent&#39;}},tooltip: {pointFormat: config[&#39;isEnabled&#39;] ? &#39;{series.name}: {point.y}&#39; : &#39;{series.name}&#39;,valueDecimals: 2},series: seriesData});},run: function() { impl.config_chart();$.each(config[&#39;names&#39;], function(i, name){impl.generate_chart(name, &#39;container_&#39;&#43;i);});}};bistock &#61; {init: function(vars) {config &#61; vars;impl.run();}};
});



转:https://my.oschina.net/ym80/blog/201324



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
author-avatar
沉佩颖岳玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有