pyrrd 程序
http://elekslabs.com/2013/12/rrd-and-rrdtool-sar-graphs-using-pyrrd.html
http://thepiandi.blogspot.jp/2013/10/graphing-real-temperature-data-using.html
https://github.com/oubiwann-unsupported/pyrrd/tree/master/examples
https://hookrace.net/blog/server-statistics
http://qiita.com/kooshin/items/c032125157d79c222a4a
感觉效率比rrdtool模块低,尤其是在update的时候
create rrd
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyrrd.rrd import RRD, RRA, DS
dss = []
rras = []
filename = 'memory.rrd'
ds1 = DS(dsName='buffer', dsType='GAUGE', heartbeat=120, minval='0', maxval='U')
ds2 = DS(dsName='cached', dsType='GAUGE', heartbeat=120, minval='0', maxval='U')
ds3 = DS(dsName='used', dsType='GAUGE', heartbeat=120, minval='0', maxval='U')
ds4 = DS(dsName='total', dsType='GAUGE', heartbeat=120, minval='0', maxval='U')
dss.extend([ds1, ds2, ds3, ds4])
rra_average_1 = RRA(cf='AVERAGE', xff=0.5, steps=1, rows=1440) # 60*60*24 / 60*1 (1d / (step * steps)
rra_average_2 = RRA(cf='AVERAGE', xff=0.5, steps=15, rows=672) # 60*60*24*7 / 60*15 (1w / (step * steps)
rra_average_3 = RRA(cf='AVERAGE', xff=0.5, steps=60, rows=744) # 60*60*24*31 / 60*60 (1m / (step * steps)
rra_average_4 = RRA(cf='AVERAGE', xff=0.5, steps=1440, rows=375) # 60*60*24*365 / 60*60*24 (1y / (step * steps)
rras.extend([rra_average_1, rra_average_2, rra_average_3, rra_average_4])
rra_min_1 = RRA(cf='MIN', xff=0.5, steps=1, rows=1440)
rra_min_2 = RRA(cf='MIN', xff=0.5, steps=15, rows=672)
rra_min_3 = RRA(cf='MIN', xff=0.5, steps=60, rows=744)
rra_min_4 = RRA(cf='MIN', xff=0.5, steps=1440, rows=375)
rras.extend([rra_min_1, rra_min_2, rra_min_3, rra_min_4])
rra_max_1 = RRA(cf='MAX', xff=0.5, steps=5, rows=1440)
rra_max_2 = RRA(cf='MAX', xff=0.5, steps=30, rows=672)
rra_max_3 = RRA(cf='MAX', xff=0.5, steps=120, rows=744)
rra_max_4 = RRA(cf='MAX', xff=0.5, steps=1440, rows=375)
rras.extend([rra_max_1, rra_max_2, rra_max_3, rra_max_4])
rra_last_1 = RRA(cf='LAST', xff=0.5, steps=5, rows=1440)
rra_last_2 = RRA(cf='LAST', xff=0.5, steps=30, rows=672)
rra_last_3 = RRA(cf='LAST', xff=0.5, steps=120, rows=744)
rra_last_4 = RRA(cf='LAST', xff=0.5, steps=1440, rows=375)
rras.extend([rra_last_1, rra_last_2, rra_last_3, rra_last_4])
rrd = RRD(filename, step=60, ds=dss, rra=rras, start='now-1y')
rrd.create(debug=True)
--------------------------------------------------------------
('memory.rrd', ['--start', u'now-1y', '--step', u'60', u'DS:buffer:GAUGE:120:0:U', u'DS:cached:GAUGE:120:0:U', u'DS:used:GAUGE:120:0:U', u'DS:total:GAUGE:120:0:U', u'RRA:AVERAGE:0.5:1:1440', u'RRA:AVERAGE:0.5:15:672', u'RRA:AVERAGE:0.5:60:744', u'RRA:AVERAGE:0.5:1440:375', u'RRA:MIN:0.5:5:600', u'RRA:MIN:0.5:30:720', u'RRA:MIN:0.5:120:750', u'RRA:MIN:0.5:1440:732', u'RRA:MAX:0.5:5:600', u'RRA:MAX:0.5:30:720', u'RRA:MAX:0.5:120:750', u'RRA:MAX:0.5:1440:732', u'RRA:LAST:0.5:5:600', u'RRA:LAST:0.5:30:720', u'RRA:LAST:0.5:120:750', u'RRA:LAST:0.5:1440:732'])
$ rrdtool fetch memory.rrd AVERAGE --start -1h
buffer cached used total
1468816440: -nan -nan -nan -nan
1468816500: -nan -nan -nan -nan
1468816560: -nan -nan -nan -nan
1468816620: -nan -nan -nan -nan
1468816680: -nan -nan -nan -nan
1468816740: -nan -nan -nan -nan
1468816800: -nan -nan -nan -nan
1468816860: -nan -nan -nan -nan
update rrd
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyrrd.rrd import RRD
import datetime, time
import random
filename = 'memory.rrd'
total = 1024*1024*1024*16
rrd = RRD(filename)
now = datetime.datetime.now()
start = now - datetime.timedelta(hours=3)
start_time = int(time.mktime(start.timetuple()))
end_time = int(time.mktime(now.timetuple()))
for timestamp in xrange(start_time, end_time+60, 60):
buffer = random.randint(5, 10) * total / 100
cached = random.randint(60, 80) * total / 100
free = random.randint(5, 10) * total / 100
rrd.bufferValue(timestamp, buffer, cached, total - buffer - cached - free, total)
rrd.update(debug=True)
graph_rrd
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyrrd.graph import DEF, CDEF, VDEF
from pyrrd.graph import LINE, AREA, GPRINT, COMMENT
from pyrrd.graph import ColorAttributes, Graph
rrdfile = 'memory.rrd'
imgfile = 'memory.png'
ca = ColorAttributes()
ca.back = '#333333'
ca.canvas = '#333333'
ca.shadea = '#000000'
ca.shadeb = '#111111'
ca.mgrid = '#CCCCCC'
ca.axis = '#FFFFFF'
ca.frame = '#AAAAAA'
ca.font = '#FFFFFF'
ca.arrow = '#FFFFFF'
g = Graph(imgfile, start='-3h', title='memory', vertical_label='Bytes', color=ca, width=480, height=200)
#g.x_grid='MINUTE:10:MINUTE:30:MINUTE:30:0:"%H:%M"'
#g.alt_y_grid=True
def_buffer = DEF(rrdfile=rrdfile, vname='buffer', dsName='buffer', cdef='AVERAGE')
def_cached = DEF(rrdfile=rrdfile, vname='cached', dsName='cached', cdef='AVERAGE')
def_used = DEF(rrdfile=rrdfile, vname='used', dsName='used', cdef='AVERAGE')
def_total = DEF(rrdfile=rrdfile, vname='total', dsName='total', cdef='AVERAGE')
g.data.extend([def_buffer, def_cached, def_used, def_total])
vdef_buffer_min = VDEF(vname='buffer_min', rpn='%s,MINIMUM' % 'buffer')
vdef_buffer_max = VDEF(vname='buffer_max', rpn='%s,MAXIMUM' % 'buffer')
vdef_buffer_avg = VDEF(vname='buffer_avg', rpn='%s,AVERAGE' % 'buffer')
vdef_buffer_last = VDEF(vname='buffer_last', rpn='%s,LAST' % 'buffer')
g.data.extend([vdef_buffer_min, vdef_buffer_max, vdef_buffer_avg, vdef_buffer_last])
vdef_cached_min = VDEF(vname='cached_min', rpn='%s,MINIMUM' % 'cached')
vdef_cached_max = VDEF(vname='cached_max', rpn='%s,MAXIMUM' % 'cached')
vdef_cached_avg = VDEF(vname='cached_avg', rpn='%s,AVERAGE' % 'cached')
vdef_cached_last = VDEF(vname='cached_last', rpn='%s,LAST' % 'cached')
g.data.extend([vdef_cached_min, vdef_cached_max, vdef_cached_avg, vdef_cached_last])
vdef_used_min = VDEF(vname='used_min', rpn='%s,MINIMUM' % 'used')
vdef_used_max = VDEF(vname='used_max', rpn='%s,MAXIMUM' % 'used')
vdef_used_avg = VDEF(vname='used_avg', rpn='%s,AVERAGE' % 'used')
vdef_used_last = VDEF(vname='used_last', rpn='%s,LAST' % 'used')
g.data.extend([vdef_used_min, vdef_used_max, vdef_used_avg, vdef_used_last])
vdef_total_min = VDEF(vname='total_min', rpn='%s,MINIMUM' % 'total')
vdef_total_max = VDEF(vname='total_max', rpn='%s,MAXIMUM' % 'total')
vdef_total_avg = VDEF(vname='total_avg', rpn='%s,AVERAGE' % 'total')
vdef_total_last = VDEF(vname='total_last', rpn='%s,LAST' % 'total')
g.data.extend([vdef_total_min, vdef_total_max, vdef_total_avg, vdef_total_last])
line_buffer = LINE(1, defObj=def_buffer, color='#FFFF00', legend='buffer')
line_cached = LINE(1, defObj=def_cached, color='#339933', legend='cached')
line_used = LINE(1, defObj=def_used, color='#FF6666', legend='used')
line_total = LINE(1, defObj=def_total, color='#0066CC', legend='total')
gcomment = COMMENT('\\n', autoNewline=False)
gprint_buffer_min = GPRINT(vdef_buffer_min, 'MAX:%7.2lf %sB')
gprint_buffer_max = GPRINT(vdef_buffer_max, 'MIN:%7.2lf %sB')
gprint_buffer_avg = GPRINT(vdef_buffer_avg, 'AVG:%7.2lf %sB')
gprint_buffer_last = GPRINT(vdef_buffer_last, 'LAST:%7.2lf %sB')
g.data.extend([line_buffer, gprint_buffer_min, gprint_buffer_max, gprint_buffer_avg, gprint_buffer_last, gcomment])
gprint_cached_min = GPRINT(vdef_cached_min, 'MAX:%7.2lf %sB')
gprint_cached_max = GPRINT(vdef_cached_max, 'MIN:%7.2lf %sB')
gprint_cached_avg = GPRINT(vdef_cached_avg, 'AVG:%7.2lf %sB')
gprint_cached_last = GPRINT(vdef_cached_last, 'LAST:%7.2lf %sB')
g.data.extend([line_cached, gprint_cached_min, gprint_cached_max, gprint_cached_avg, gprint_cached_last, gcomment])
gprint_used_min = GPRINT(vdef_used_min, 'MAX:%7.2lf %sB')
gprint_used_max = GPRINT(vdef_used_max, 'MIN:%7.2lf %sB')
gprint_used_avg = GPRINT(vdef_used_avg, 'AVG:%7.2lf %sB')
gprint_used_last = GPRINT(vdef_used_last, 'LAST:%7.2lf %sB')
g.data.extend([line_used, gprint_used_min, gprint_used_max, gprint_used_avg, gprint_used_last, gcomment])
gprint_total_min = GPRINT(vdef_total_min, 'MAX:%7.2lf %sB')
gprint_total_max = GPRINT(vdef_total_max, 'MIN:%7.2lf %sB')
gprint_total_avg = GPRINT(vdef_total_avg, 'AVG:%7.2lf %sB')
gprint_total_last = GPRINT(vdef_total_last, 'LAST:%7.2lf %sB')
g.data.extend([line_total, gprint_total_min, gprint_total_max, gprint_total_avg, gprint_total_last, gcomment])
g.write(debug=False)

pyrrd 程序的更多相关文章
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 微信应用号(小程序)开发IDE配置(第一篇)
2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- 【探索】在 JavaScript 中使用 C 程序
JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
随机推荐
- OAF_EO系列6 - Delete详解和实现(案例)
2014-06-14 Created By BaoXinjian
- 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)
Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...
- 用widthStep的方法来增加某范围的像素----与imageROI对比
//用widthStep的方法来增加某范围的像素 //作者:sandy //时间:2015-10-5 #include <cv.h> #include <highgui.h> ...
- [物理学与PDEs]书中出现的向量公式汇总
P 11 1. $\rot (\phi{\bf A})=\n \phi\times{\bf A}+\phi\ \rot{\bf A}$. 2. $-\lap {\bf A}=\rot\rot {\bf ...
- Bugtags:移动时代首选 Bug 管理系统
Bug 管理系统之重 回想我们每次开启一个新项目,筹备之初,首要之事就是选择一款 Bug 管理系统.市面上有诸多 Bug 管理系统可供选择:Jira.Redmine.Bugzilla 等.这些系统功能 ...
- Citrix 服务器虚拟化之五 Xenserver配置存储
Citrix 服务器虚拟化之五 Xenserver配置存储 XenServer中定义了一个容器称为存储库(SR)来描述一个特定的存储目标存储虚拟磁盘映像(VDI). VDI是一个的磁盘抽象,包含一个 ...
- centos的软件安装方法rpm和yum
centos的软件安装大致可以分为两种类型: [centos]rpm文件安装,使用rpm指令 类似[ubuntu]deb文件安装,使用dpkg指令 [centos]yum安装 类似[ubuntu ...
- java socket通讯(一) 入门示例
一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...
- go get 获得 golang.org 的项目
go get 用来动态获取远程代码包的,目前支持的有BitBucket.GitHub.Google Code和Launchpad.这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行g ...
- 蓝桥杯---波动数列(dp)(背包)(待解决)
问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个数列中后一项总是比前一项增加2或者减少3. 栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减 ...