导语:优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。


优维低代码实践连载第26期

《使用图表构件和cmdb聚合查询接口实现统计功能》


在一些场景中,需要对某些数据做一些统计,然后直观的展示给用户,比如下面这几个场景。


一、统计主机总数、Linux系统主机总数和Windows系统主机总数


首先是要获取数据,主机总数通过easyops.api.cmdb.instance@SearchTotal接口获取,需要指定HOST模型,接口返回的数据存在hostTotal这个CTX里面



Linux系统主机和Windows系统主机的总数通过实例字段聚合easyops.api.cmdb.instance@AggregateInstance接口获取,这个接口需要指定模型字段和聚合属性的id,聚合类型目前只支持字符类型的属性。可以去契约中心看更多详细的信息。



这里我们指定模型字段为HOST,聚合属性为操作系统类型osSystem,把接口返回的数据存在osSystemAggregateValue这个CTX里面。



接下来通过统计卡片构件monitor-dashboard.statistic-card展示数据,主机总数的展示:



Linux系统主机总数的展示,在osSystemAggregateValue这个CTX中,找到聚合值为Linux的这条数据,里面data_list数据的长度就是该类型主机的总数了,Windows系统主机总数的展示同理。



这是最终的效果。



二、统计主机agent状态和主机环境


首先通过easyops.api.cmdb.instance@AggregateInstance接口获取数据,指定模型字段HOST,由于主机agent状态和主机环境的属性是枚举类型,聚合属性的类型还不支持这种,不能得到聚合后的结果,所以这里的聚合属性id指定一个不存在的属性type,可以得到所有的主机实例数据,同时指定要接口返回的字段_agentStatus、_environment。接口返回数据存在aggregateInstances这个CTX中,然后前端再来处理数据。



接下来使用chart-v2.pie-chart构件展示统计后的数据,这里主要设置构件的data属性,以主机环境为例,首先通过lodasd的countBy方法得到key为环境类型,value为该环境类型主机数量的对象,然后通过Object.entries方法得到元素为[环境类型,主机数量]这种类型的一个数组,最后调用map方法返回最终结果。



页面效果如下



三、统计主机agent版本的使用情况


首先通过easyops.api.cmdb.instance@AggregateInstance接口获取数据,指定模型字段HOST,指定聚合属性id为agentVersion,这里不需要统计未安装agent的主机,所以还需要指定query参数排除这类主机。然后处理接口返回结果得到可以使用的数据,存放在agentVersionUsedTopData这个CTX里面。



可以使用数据预览的功能,看看各个CTX的值。



最后使用chart-v2.horizontal-bar-chart构件来展示数据,构件属性配置如下



页面效果如下



四、统计近一年来主机的变更趋势


首先通过easyops.api.cmdb.instance@AggregateInstance接口获取数据,指定模型字段HOST,由于这里是按月份来展示,接口无法得到主机实例变更时间按月份来聚合的结果,所以这里的聚合属性id指定一个不存在的属性type,获取所有的主机实例数据,同时指定要接口返回的字段mtime,最后指定query参数查询变更时间为近一年的主机实例。



接口返回的数据先存放在recentlyMtimeModifiedValue这个CTX中,对数据进行初步的处理,处理后的结果存在hostChangeTrendCountMap这个CTX中,最后调用函数getHostChangeTrendData处理得到最终可以直接使用的数据,存放在hostChangeTrendData这个CTX中。



最后使用chart-v2.line-chart构件来展示数据,属性配置如下



页面效果如下