Python怎样绘制Crushmap分布图
发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,Python怎样绘制Crushmap分布图,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理使用命令ceph report --form
千家信息网最后更新 2024年10月24日Python怎样绘制Crushmap分布图
Python怎样绘制Crushmap分布图,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
原理
使用命令ceph report --format=json > crush.json导出json格式数据文件,之后使用pydot和graphviz实现绘图。
使用说明
安装依赖
pip install pydotpip install graphviz
脚本代码
# -*- coding: utf-8 -*-import pydotfrom graphviz import Digraphimport jsonimport sysclass build_crushmap_graphviz(): """ 1. 使用命令ceph report --format=json > crush.json导出数据文件 2. 每种类型bucket一个颜色,不够自己去color_list里面添加,支持最多10级结构 3. 生成的文件默认问png格式,文件保存在当前目录的crushmap.png """ def __init__(self): self.graph = pydot.Dot('ceph_crushmap', graph_type='digraph') self.dot = Digraph(comment='CrushMap', node_attr={'shape': 'record', 'height': '.1'}) self.dot.graph_attr['size'] = '4096,2160' self.dot.graph_attr['resolution'] = '100' self.dot.graph_attr['bb'] = '0,0,4,8' self.dot.format = 'png' self.color_list = ["maroon", "pink", "khaki", "orange", "purple", "yellow", "cyan", "beige", "red"] self.save_name = "crushmap" def build(self, crushmap_file): try: with open(crushmap_file) as data_file: data = json.load(data_file) for i in range(len(data['crushmap']['devices'])): self.dot.node(str(data['crushmap']['devices'][i]['id']), 'device: ' + data['crushmap']['devices'][i]['name'], {'style': 'filled', 'fillcolor': 'green'}) tmp_list = [] color_dict = {} for i in range(len(data['crushmap']['buckets'])): if data['crushmap']['buckets'][i]['type_name'] in tmp_list: color_ = color_dict[data['crushmap']['buckets'][i]['type_name']] else: tmp_list.append(data['crushmap']['buckets'][i]['type_name']) color_ = self.color_list.pop() color_dict[data['crushmap']['buckets'][i]['type_name']] = color_ self.dot.node(str(data['crushmap']['buckets'][i]['id']), data['crushmap']['buckets'][i]['type_name'] + ': ' + data['crushmap']['buckets'][i]['name'], {'style': 'filled', 'fillcolor': color_}) edges_list = [] for i in range(len(data['crushmap']['buckets'])): for j in range(len(data['crushmap']['buckets'][i]['items'])): self.dot.edge(str(data['crushmap']['buckets'][i]['id']), str(data['crushmap']['buckets'][i]['items'][j]['id'])) edges_list.append( str(data['crushmap']['buckets'][i]['id']) + str(data['crushmap']['buckets'][i]['items'][j]['id'])) self.dot.render(self.save_name) print "Sucessful, File = {}.{}".format(self.save_name,self.dot.format) except: print "Faild!"if __name__ == '__main__': file_path = sys.argv[1] crush_make = build_crushmap_graphviz() crush_make.build(file_path)
用例
保存上面的脚本为build_crushmap.py,执行以下命令,成功会生成crushmap.png
user@demo$ python build_crushmap.py crush3.jsonSucessful, File = crushmap.png
看完上述内容,你们掌握Python怎样绘制Crushmap分布图的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
文件
命令
分布图
内容
数据
方法
更多
格式
脚本
问题
生成
成功
束手无策
为此
不够
代码
使用说明
原因
原理
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
安仁学电脑软件开发学校
商业数据库考研
胶州ios软件开发公司
网络安全法全国案例
轻量级服务器部分ip无法连接
共享软件开发方案
正在解析代理服务器
数据库自连接和子连接
全境封锁2服务器连接不佳
c语言数据库常用查询
购物中心 网络安全管理
wlk服务器首杀成就
东莞网络安全实战培训收费标准
服务器开应用
未来之役更换不了服务器怎么办
高网络安全设备防火墙什么的
数据库错误17055
计算机网络技术与应用教学
cmd 关闭数据库
网络安全教程从入门到放弃
数据库根据时间进行筛选数据
网络安全三谁原则
cs1.6的服务器管理平台
经典数据库 查询
航空公司的网络安全岗薪酬
达梦数据库备份数据
沈阳手机软件开发怎样收费
本地文件放到linux服务器
深圳华宇互联网科技贵阳分公司
软件开发融资企划案