Highstock+flask+mysql实现多线条动态刷新
来源:互联网 发布:平面设计制图软件 编辑:程序博客网 时间:2024/05/16 02:00
server端:
flask web服务器,接受请求返回数据
from flask import Flask,render_template,requestfrom mysql import MySqlimport timeimport datetimeimport randomimport jsonapp = Flask(__name__)def get_data_buyer(sql): mysql = MySql() datas = mysql.query_data(sql) return parse_data_from_db(datas, 'ts', 'buyer')def get_data_seller(sql): mysql = MySql() datas = mysql.query_data(sql) return parse_data_from_db(datas, 'ts', 'seller')def get_data_user(sql): mysql = MySql() datas = mysql.query_data(sql) return parse_data_from_db(datas, 'ts', 'login_user')def _datetime2timestamp(dt): date_format = "%Y-%m-%d %H:%M:%S" return time.mktime(time.strptime(str(dt), date_format))def _timestamp2datetime(ts): date_format = "%Y-%m-%d %H:%M:%S" return time.strftime(date_format, time.localtime(ts))def parse_data_from_db(data, field_ts=None, field_other=None): if len(data) == 0: return [], None results = [] max_time = 0.0 for item in data: temp = [] ts = _datetime2timestamp(item.get(field_ts)) temp.append(ts * 1000) if field_other == 'login_user': temp.append(int(item.get(field_other)) / 100) else: temp.append(int(item.get(field_other))) if ts > max_time: max_time = ts results.append(temp) return results, _timestamp2datetime(max_time)@app.route('/')def index(): return render_template('MulLine.html')@app.route('/data')def data(): if int(request.args.get('max_time_buyer', 0)) == 0: sql_buyer = "select * from t_buyer" else: last_time_buyer = _timestamp2datetime(float(request.args.get('max_time_buyer', 0)) / 1000.0) sql_buyer = "select * from t_buyer where unix_timestamp(ts) > unix_timestamp(" + '"' + last_time_buyer + '"' + ")" if int(request.args.get('max_time_seller', 0)) == 0: sql_seller = "select * from t_seller" else: last_time_seller = _timestamp2datetime(float(request.args.get('max_time_seller', 0)) / 1000.0) sql_seller = "select * from t_seller where unix_timestamp(ts) > unix_timestamp(" + '"' + last_time_seller + '"' + ")" if int(request.args.get('max_time_user', 0)) == 0: sql_user = "select * from t_user" else: last_time_user = _timestamp2datetime(float(request.args.get('max_time_user', 0)) / 1000.0) sql_user = "select * from t_user where unix_timestamp(ts) > unix_timestamp(" + '"' + last_time_user + '"' + ")" arr = {} data_buyer, max_time_buyer_str = get_data_buyer(sql_buyer) data_seller, max_time_seller_str = get_data_seller(sql_seller) data_user, max_time_user_str = get_data_user(sql_user) arr['data_buyer'] = data_buyer arr['data_seller'] = data_seller arr['data_user'] = data_user return json.dumps(arr)def start_server(): app.run(host='0.0.0.0',port=9999,debug=True)if __name__=='__main__': start_server()
js文件:
周期性向server请求数据,计算最晚的时间,请求新数据并显示
function find_max_time(times){ max_time = times[0][0] for(i=1; i < times.length; i++){ if(times[i][0] > max_time){ max_time = times[i][0] } } return max_time}$(function () { Highcharts.setOptions({ global : { useUTC : false } }); $.getJSON('/data', function(data){ var param_max_times = { 'max_time_buyer':0, 'max_time_seller':0, 'max_time_user':0 }; param_max_times['max_time_buyer'] = find_max_time(data.data_buyer); param_max_times['max_time_seller'] = find_max_time(data.data_seller); param_max_times['max_time_user'] = find_max_time(data.data_user); $('#container').highcharts('StockChart', { chart : { events : { load : function () { var series_data_buyer = this.series[0], series_data_seller = this.series[1], series_data_user = this.series[2]; setInterval(function() { $.getJSON('/data', param_max_times, function(data) { console.log(data); var data_buyer = data.data_buyer, data_seller = data.data_seller, data_user = data.data_user; if(data_buyer.length > 0){ console.log(data_buyer); $.each(data_buyer, function(i, d){ series_data_buyer.addPoint(d, true, true) console.log(d) }); param_max_times['max_time_buyer'] = find_max_time(data_buyer); } if(data_seller.length > 0){ $.each(data_seller, function(i, d){ series_data_seller.addPoint(d, true, true) }); param_max_times['max_time_seller'] = find_max_time(data_seller); } if(data_user.length > 0){ $.each(data_user, function(i, d){ series_data_user.addPoint(d, true, true) }); param_max_times['max_time_user'] = find_max_time(data_user); } }); },1000 * 10) } }, borderColor: '#EBBA95', borderWidth: 2, borderRadius: 10 }, navigator: { adaptToUpdatedData: false, handles: { backgroundColor: '#9BCD9B', borderColor: '#9BCD9B' }, }, legend: { enabled: true, layout: 'vertical', align: 'left', verticalAlign: 'top', backgroundColor: '#FCFFC5', borderColor: 'black', borderWidth: 2, shadow: true }, rangeSelector: { buttonTheme: { // styles for the buttons fill: 'none', stroke: 'none', 'stroke-width': 0, r: 8, style: { color: '#039', fontWeight: 'bold' }, states: { hover: { }, select: { fill: '#039', style: { color: 'white' } } } }, inputBoxBorderColor: 'gray', inputBoxWidth: 120, inputBoxHeight: 18, inputStyle: { color: '#039', fontWeight: 'bold' }, labelStyle: { color: 'silver', fontWeight: 'bold' }, buttons: [{ count: 30, type: 'second', text: '30S' }, { count: 5, type: 'minute', text: '5M' }, { count: 30, type: 'minute', text: '30M' }, { count: 1, type: 'day', text: '1D' },{ count: 2, type: 'day', text: '2D' }, { type: 'all', text: 'All' }], inputEnabled: true, selected: 5 }, title : { text : 'Customer Statics', style: { color: '#5CACEE', fontWeight: 'bold' } }, xAxis: { title: { text: 'time' }, type: 'datetime', tickPixelInterval: 50 }, yAxis: [{ title: { text: 'value' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }], exporting: { enabled: false }, series : [{ name : 'buyer', tooltip: { valueDecimals: 2, valuePrefix: '$', valueSuffix: ' USD' }, data : data.data_buyer },{ name : 'seller', tooltip: { valueDecimals: 2, valuePrefix: '%', valueSuffix: ' RMB' }, data : data.data_seller },{ name : 'login_user', tooltip: { valueDecimals: 2, valuePrefix: '#', valueSuffix: ' CCC' }, data : data.data_user }] } ); });});
1 0
- Highstock+flask+mysql实现多线条动态刷新
- Highstock+flask实现多线条动态刷新
- flask + mysql + highcharts(动态刷新)实现的简单监控系统
- highstock
- SpringMVC+highstock实现曲线报表
- webservice 实现动态刷新
- highstock remove series 后动态添加series
- 实现动态修改flask的邮件配置
- android动态壁纸---线条
- Flask+MySql实现用户登录注册
- [HighStock使用和积累] 内部留接口局部刷新
- highcharts和highstock实时刷新折线图小总结
- 抗锯齿线条 实现
- 用asp+javascript实现动态数据联动,不刷新
- highcharts实现动态刷新两(多)组数据
- Python flask多维字典实现菜单动态添加
- 动态背景线条,鼠标移动线条汇聚---背景特效
- 基于 Flask 与 MySQL 实现番剧推荐系统(2)
- 将upload上传文件的临时文件,移动到目标位置
- mysql之经典case when
- 广域网笔记
- 生产者和消费者
- Android存储访问及目录
- Highstock+flask+mysql实现多线条动态刷新
- 各种颜色的RGB值
- 测试下kafka是否能成功运行
- 解决VM下Linux中mysql无法远程连接的问题,报错码1130,1045
- 用DMA直接驱动GPIO,实现GPIO最高输出速率
- BZOJ 1172 Balkan2007 Dream
- 源码分析 --- Context
- linphone函数video_stream_event_cb()分析
- 【项目中---WebView】Webview打开本地图片文件选择解决方案