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安全错误
数据库的锁怎样保障安全
ibm一体机数据库
装配式网络技术试验设备
闲置服务器产生价值
施耐德服务器报警8141
网络安全与个人隐私
魔兽世界v服务器
海南山里红网络技术有限公司
服务器要钱吗
星火互联网络科技有限公司
蜀山区推广网络技术开发费用
电脑编程好还是软件开发好
戴尔服务器t640评测
网络安全 补贴
尔雅网络安全
sql连接数据库软件
组态王用的数据库
嘉兴华荣网络技术有限公司
易帮互联网科技有限公司
有关网络安全协议的讨论
网络安全规划与设计报告
广东综合网络技术排名靠前
软件开发测试心得体会
吉利软件开发部是外包公司吗
大兴电脑服务器回收选哪家
量化交易对数据库要求
通州区网络技术服务报价
2022全球网络技术趋势
2022年国家网络安全宣传
通用权限 数据库
阿里云服务器能玩和平精英吗