Python怎样绘制Crushmap分布图
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,Python怎样绘制Crushmap分布图,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理使用命令ceph report --form
千家信息网最后更新 2025年12月01日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安全错误
数据库的锁怎样保障安全
增城物联网软件开发
国内免费mysql数据库
热血江湖怎么看手游服务器
河南pdu服务器专用电源批发
管理服务器的部门
成都招商软件开发银行面试
ip电话网关服务器
软件开发秦川
电脑浏览器代理服务器设置
三级网络技术百度网盘
dns电信服务器地址杭州
马服服务器
博乐出入库管理软件开发
软件技术软件开发
数据库可视化版本管理
数据库的删除数据语句
网络安全知识ttp
互联网的服务器在哪里
火山小视频软件开发平台
软件开发真的看天赋吗
网络安全孵化器推荐
朵歌互联网科技
浙江项目软件开发价位
大同软件开发应用范围
网络安全工程师的就业前景
中国网络安全战略发布
网络安全同担网络安全共享
校本研修网络安全
浪潮和联想服务器
织梦同步数据库表