轻量级可视化方案

近期有需求需要做一个可视化工具,一个监控页面,需求较为轻量,且不想搞前后端分离,想要一个jar搞定,主要也是不想部署两套服务(一个前端,一个后端),所以想要自己搞一搞,于是开始了趟坑之旅

整体设计思路

  1. springboot整合整个服务
  2. jetty提供servlet容器
  3. springmvc提供路由
  4. 模板引擎+js渲染动态页面
  5. ui美化页面

数据采集

可视化的需求当然是用来数据分析,然后根据分析后的数据指定监控指标,发送异常告警。那么自然就少不了数据。那么就需要调用数据的采集问题

  1. grafana报表配置的api,查看官方api可以满足我们的需求,提供增删改查登录认证切换用户组织。切换组织是完全走的歪门邪道,非官方api,自己按照页面操作时看请求抓出来的api。
  2. dubbo元数据,当然可以从zk直接拉取自己想要的数据,但是还是需要走常规路线,提需求给工具团队或者运维团队,请求友方的帮助。自然数据采集不是问题

数据采集调研期间就出现了两个问题?

  1. grafana是否可以通过抓到的api进行切换组织,经过测试是可以的:http://grafana_host/?orgId=22
  2. grafana认证问题,从官方文档中看到,是有api提供认证的,操作的方式可以通过创建token,携带token进行操作报表。另一种方式则是使用登录后的cookie进行操作报表。我们选用的是登录的方式。因为公司有提供的cas服务,所以只要登录认证后便可以为所欲为了,哈哈

数据采集的问题基本全部走通,那么就可以进行下一步了,原型设计

页面原型

首先要搞一个原型工具,大体搜了搜选择了墨客mockplus,对于我个小白学习使用的体验来说,是很简单且友好的,界面获取不好看,不能责备工具,还是个人设计问题,不多说上图在这里插入图片描述

UI设计

哈。。。完全空白,想要搞一个好看的页面真得不简单,首先想到了那原来的前端项目使用,使用的是node.js+angular.js,但是真得好重,要想改成自己用的简单页面,量不小,而且上线时还需要申请单独的前端服务部署的机器。于是就想到了我们伟大的开源社区贡献者们,开始选择了使用Bootstrap框架模板,但是发现真得没有适合的模板,为了能快速搞起来,最后选择了妹子ui,哈哈哈,其实是amazeui。感谢开源贡献者的小伙伴们。不多说上图。没错里面的表格选项正式我们的需要。
页面采用jquery.js+amaze.js实现。官方中文文档很详细,然后按照文档修改页面改成自己想要的样式,还是很容易上手的,麻雀虽小,功能俱全,主题风格切换,边框隐藏,登录页等等,图表采用的是百度开源的产品echart
image.png

撸码踩坑

有了页面,那还等什么,撸码
使用springboot开发,选择模板引擎。

  1. velocity,由于1.5.x之后的springboot不再支持,想要支持需要手工配置,不如其他自动配置便捷
  2. thymeleaf,开始搞起,结果发现其设计对页面的书写格式要求很严格,各种报错注释中不能包好"–",标签必须以结尾。因为页面较多书写不够严谨,所以改动量较大,于是放弃
  3. freemarker,切换成freemarker确实不会再各种格式报错了,于是开始撸码

选择js
感觉自己像个老古董一样捡起来了jquery开始撸码,哎,期间真得踩了好多坑,具体整理几个具有代表性的

  1. 为了实现复选框,下拉框+模糊匹配等等功能,使用jquery要各种对dom操作。且每次请求都要根据id或者其他属性获取dom读取其值。关联耦合性较强
  2. 当然厉害的还在后面。动态刷新表格,没错,jquery是没有双向绑定的,请求后端数据后,根据返回json数据拼接表格,再通过dom对其拼接的表格字符串进行替换。。。这个代码写完后,真得很酸爽。

这两点搞得有点崩溃,于是便想尝试新得一些框架,于是便找了找,angular、react、vue。最后发现vue这个框架。轻量,学习成本低,而且支持双向数据绑定,数据刷新后页面会同步渲染。这不正是我们的需要。而且使用mvvm的设计理念,代码结构更加简洁明了。几乎可以告别dom操作。与页面耦合性低
开始撸码,可怜之前的代码,咬牙也得重构,哈哈,其实没多少页面
改为Vue.js之后结果发现报错,前期认为是freemarker模板不支持的问题,于是切换成thymeleaf,之后便没有异常了。后来发现其实是需要配置一下就可以了,不过这个体验还是不好的,说明了thymeleaf的格式严谨还是有必要的

templates should only be responsible for mapping the state to the ui. avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.
//解决方法
<script type="application/javascript"> 
    // your code
</script>  

饶了一大圈又回到了thymeleaf,springboot推荐还是有些依据的

踩坑干货

问题:jquery ajax POST(json)请求后端报错ERROR:415

原因:请求header没有设置json

headers: {'Accept': 'application/json','Content-Type': 'application/json'}

问题:jquery ajax POST(json)请求,后台响应成功,返回正确json但不执行success方法,执行error

原因:返回的json格式不对

问题:springboot+springMVC项目,控制台报错
JSON parse error: Unrecognized token 'appCode': was expecting ('true', 'false' or 'null')

原因:解决方法:data:JSON.stringify(str)。请求参数data数据JSON格式不规范,1.4+以上的jquery版本对json格式要求更加严格.如果不是严格的json格式,就不能正常执行success回调函数.

问题:数据刷新页面不同步刷新

原因:

  1. 方法(例如:异步请求的post方法中)中使用的this要复制到本地例如:var _this = this。
  2. 数组操作要使用push、set等操作,指针改变操作不会同步刷新数据。
  3. 直接通过dom操作元素属性也不会同步数据至vue的data model,例如:通过jquery将所有复选框置为选中状态
问题:增加@click之后页面加载不全且不报错

原因:click指向的方法定义有问题,因为我使用的方法名是"delete",与vue.js中的方法冲突导致的

问题:index页面支持点击按钮隐藏左边框,tables页面不支持

原因:发现模板的app.js中对于不同页面的body有个性化的处理,发现我在使用thymeleaf模板时用的replace将tables页面的body的data-type属性替换了,而模板中使用的data-type属性是index页面的,于是导致app.js在加载tables页面时采用了index的处理方式,由于页面差异大,数据格式也有很大差异,导致报错,没有继续加载后面的动作,而点击隐藏的动作正是在后面的代码中进行处理的,于是将模板的引用的replace方式改为include方式,每个页面使用自己正确的data-type属性,问题得以解决

问题:vue的data数据在页面中使用{{}}获取不到值

原因:因为自己的写script脚本放在了thymeleaf模板块的外面,而使用vue的数据是在thymeleaf模板块的内部导致的,将script脚本放入thymeleaf模板内部即可

总结

  1. Vue.js果真很抢单,轻量,学习成本低,并且拥有丰富多样的组件库,官方文档健全。支持双向数据同步。设计模式采用MVVM架构,将view与model隔离开,实现同样的功能代码比jquery更加简洁优雅。
  2. thymeleaf模板引擎3.x功能更加强大健全,支持模板的嵌套。如果不需要前后端分离,springboot的完美支持。相对于freemarker暂时没有想到什么优势,但是其严格规范使得其对于vue这类年轻的框架能够完美的融合,这一点是要比freemarker更好一些的,当然由于格式对的要求严谨,以至于一些开源框架使用起来涉及的改动要比freemarker要更多
  3. AmazeUI开源框架,页面很漂亮,开源模板也很丰富,官方文档健全,学习成本低,易上手,感谢开源大神们的贡献
  4. 感谢Element开源ui与vue组件,让前端的开发更加简洁
  5. 感谢vue-select提供的强大选项功能组件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Echarts Flask可大屏是一种基于Flask框架和Echarts图表库的数据可方案。通过使用Flask框架搭建Web应用程序,将数据传递给Echarts图表库进行可展示,实现数据的直观呈现和分析。该方案具有易于扩展、灵活性高、可定制等优点,适用于各种数据可场景。 ### 回答2: Echarts Flask可大屏是指利用Flask框架和Echarts图表库,搭建符合用户需求的数据可展示平台。由于Flask框架的灵活性,结合Echarts图表库的优秀设计,Echarts Flask可大屏具有良好的展示效果和开发效率。 在实现Echarts Flask可大屏的过程中,首先需要梳理需求,确定需要展示的内容、数据类型、格式和图表类型。然后可以通过Flask框架搭建Web应用程序,建立数据源与数据库的连接,并将数据转换成Echarts图表所需的格式。接着,根据需求选择适合的Echarts图表类型,根据Echarts官方文档进行相应的配置和定制,添加事件和交互。最后,可以根据需求优布局、觉效果和交互性,建立大屏展示模式,从而实现一个符合要求的Echarts Flask可大屏。 Echarts Flask可大屏不仅可以实现数据展示,还可以对数据进行实时监控、分析和预测,提供更多价值。同时,Echarts图表库支持多种数据格式,不仅可以展示静态数据,还可以处理动态数据,可适用于各种行业和领域。Echarts Flask可大屏搭建简单易用,且具有高度的定制性,可以满足不同用户的需求。理解和掌握Echarts Flask可大屏的开发,具有重要的实际应用意义和深远的发展前景。 ### 回答3: Echarts Flask可大屏是一种将Python Web框架Flask和JavaScript图表库Echarts相结合的数据可方法。Flask是一个轻量级的Web应用框架,使用Python语言编写。它提供了丰富的扩展功能,包括了路由映射、请求和响应、数据库集成等。Echarts是一种基于JavaScript语言的开源可库,它提供了各种各样的可图表和动画效果。 使用Echarts Flask可大屏,可以将数据以图表形式展现在网页上,用户可以通过图表直观地了解数据的趋势和关联性。在项目中,可以使用Python将数据从数据库中提取并传递给前端,再通过Echarts实现数据可。通过调整图表的样式和设置交互式功能,可以构建出漂亮且功能丰富的数据可页面。 为了实现Echarts Flask可大屏,需要涉及到以下几个方面的内容: 1. 安装Flask和Echarts:首先需要在本地安装Flask和Echarts,可以通过pip命令进行安装。 2. 数据提取与处理:在Flask中使用Python代码从数据库中提取数据,进行处理和转换,最终传递给前端。 3. 前端页面设计:在前端页面中使用Echarts库创建图表,并设置各种参数和样式,以及交互式功能。 4. 后端和前端连接:通过Flask提供的路由功能,将前端页面和后端数据集成起来,实现数据可页面的显示和交互。 总的来说,Echarts Flask可大屏是一种非常实用的数据可方法,可以帮助用户更加直观地了解数据的分布和趋势,也可以方便开发者快速构建出高质量的数据可页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值