Software need for plotting signal graphs | docsis.org

You are here

Software need for plotting signal graphs

8 posts / 0 new
Last post
Anonymous (not verified)
Software need for plotting signal graphs

Hi all,
currently i need to get a software that is able to plot SNR, TX graphs over a period of time. Best if it could do ping plots as well.
SNMP can do it but it's data only limited to 2hrs only.
Anyone got any to recommend?
Thanks

wittmann
Software need for plotting signal graphs

rrdtool?

www.rrdtool.org

Anonymous (not verified)
Software need for plotting signal graphs

anything simpler?
bcos im using windows and it requires perl to work
even i get it working i would have to install all the pcs in my workplace for them :(

wittmann
Software need for plotting signal graphs

maybe the Fronted Cacti: http://www.cacti.net/

There can you make a homepage where al PCs can visit. It makes sense to use one machine to get the values from the CMTS instead many machines make a lot of management-traffic.

Anonymous (not verified)
Software need for plotting signal graphs

solarwinds...is the best tool for your inquiry

laceytech
Software need for plotting signal graphs

shiryo wrote:anything simpler?
bcos im using windows and it requires perl to work
even i get it working i would have to install all the pcs in my workplace for them :(

download perl from ActiveState http://www.activestate.com/Products/ActivePerl/?src=freeASPN&type=txt&X=45&campaign=APE

Anonymous (not verified)
Re: Software need for plotting signal graphs

My solution is python + rrdtool for python.
If you wanna detail setting up env..., please mail to me!
Example in below:

#!/usr/bin/env python
import sys
import os
import string
import time
import binascii
import rrdtool
from pysnmpclass import snmpclass
from oraclass import ORA

if len(sys.argv)!=2:
print '[Parameter]: CMTS-ID'+chr(10)
sys.exit(1);
cmts_ip = sys.argv[1]
cmts_id = sys.argv[1]
snmp_ip = cmts_ip
itemSQL = "select oid,ip_type,v_type,monitor from cm_measure_item order by id"
listSQL = "select mac,cm_mac,ip,cmts_ip from cm_measure_list where end_date is null and cmts_id='"+cmts_id+"' order by cmts_id,mac"
oracon = ORA('xxx/xxxxx@DBLINK')
if not oracon:
print "[Oracle Info]: Can't open database"+chr(10)
sys.exit()

rst = oracon.execall(itemSQL)
if rst is None:
print "[Oracle Info]: Querying item empty"+chr(10)
oracon.se_close()
sys.exit()
elif len(rst)==0:
oracon.se_close()
sys.exit()

oid_arr={}
iptype_arr={}
vtype_arr={}
monitor_arr={}
vul={}
if len(rst)>0:
item_cnt = 0
for aw in rst:
oid_arr[item_cnt] = aw[0]
iptype_arr[item_cnt] = aw[1]
vtype_arr[item_cnt] = aw[2]
monitor_arr[item_cnt] = aw[3]
item_cnt = item_cnt+1
rst = oracon.execall(listSQL)
if rst is None:
print "[Oracle Info]: Querying list empty"+chr(10)
oracon.se_close()
sys.exit()
elif len(rst)<=0:
print 'No Record...'
oracon.se_close()
sys.exit()

lstmac_arr={}
lstcmmac_arr={}
lstip_arr={}
lstcmtsip_arr={}
lstvul_arr={}
if len(rst)>0:
list_cnt = 0
for aw in rst:
lstmac_arr[list_cnt] = aw[0]
lstcmmac_arr[list_cnt] = aw[1]
lstip_arr[list_cnt] = aw[2]
lstcmtsip_arr[list_cnt] = aw[3]
lstvul_arr[list_cnt] = {}
for i in range(0,item_cnt):
if vtype_arr[i]=='INT':
lstvul_arr[list_cnt][i] = 0
elif vtype_arr[i]=='STRING':
lstvul_arr[list_cnt][i] = ''
else:
lstvul_arr[list_cnt][i] = None
list_cnt = list_cnt+1

oracon.se_close()
if list_cnt<=0:
print 'No Record...'
sys.exit()

def snmpget(agt, oidx, ptr, comm):
global oid_arr,snmp_ip
if ptr is not None:
OID_P = "%s%s" % (oid_arr[oidx], ptr)
else:
OID_P = oid_arr[oidx]
print snmp_ip,OID_P
try:
MAC_RET = agt.snmpget([snmp_ip,'-c',comm,OID_P])
except:
return None
if MAC_RET is not None:
return MAC_RET[0][1]
return None

def clear_lst(idx):
global item_cnt,lstvul_arr,vtype_arr
for i in range(0,item_cnt):
if vtype_arr[i]=='INT':
lstvul_arr[idx][i] = 0
elif vtype_arr[i]=='STRING':
lstvul_arr[idx][i] = ''

def measure_list(agt, idx):
global snmp_ip,cmts_ip,lstvul_arr
clear_lst(idx)
mac = lstcmmac_arr[idx]
snmp_ip = cmts_ip
mac_b = binascii.unhexlify(mac)
mac1 = ord(mac_b[0])
mac2 = ord(mac_b[1])
mac3 = ord(mac_b[2])
mac4 = ord(mac_b[3])
mac5 = ord(mac_b[4])
mac6 = ord(mac_b[5])
mac_mib = "%d.%d.%d.%d.%d.%d" % (mac1,mac2,mac3,mac4,mac5,mac6)
vul[0] = snmpget(agt,0,mac_mib, 'public')
if vul[0] is None or vul[0]=='':
return -1
mac_ptr = "%d" % (vul[0])
vul[1] = lstip_arr[idx]
lstvul_arr[idx][0] = vul[0]
lstvul_arr[idx][1] = vul[1]
for i in range(2,item_cnt):
if monitor_arr[i]!='O':
continue
if iptype_arr[i]=='CMTS':
snmp_ip = cmts_ip
vul[i] = snmpget(agt,i,mac_ptr,'public')
elif iptype_arr[i]=='CM':
if vul[2]!=6:
if vtype_arr[i]=='INT':
vul[i] = 0
elif vtype_arr[i]=='STRING':
vul[i] = ''
else:
snmp_ip = vul[1]
vul[i] = snmpget(agt,i,None,'public')
elif iptype_arr[i] is not None:
snmp_ip = cmts_ip
vul[i] = snmpget(agt,i,vul[string.atoi(iptype_arr[i])-1],'public')
lstvul_arr[idx][i] = vul[i]
return 1

agent = snmpclass(version='v2c',community='public')
for i in range(0,list_cnt):
relt = measure_list(agent, i)
rrdname = '/home/cmnms/rrd_b/%s_basic.rrd' % (lstcmmac_arr[i])
png0name = '/home/cmnms/rrd_b/%s_power_s.png' % (lstcmmac_arr[i])
png1name = '/home/cmnms/rrd_b/%s_power.png' % (lstcmmac_arr[i])
png2name = '/home/cmnms/rrd_b/%s_traffic.png' % (lstcmmac_arr[i])
png3name = '/home/cmnms/rrd_b/%s_traffic_mta.png' % (lstcmmac_arr[i])
if not os.path.exists(rrdname):
rrdtool.create(rrdname, '--step', '300', \
'DS:STATUS:GAUGE:600:0:6','DS:PWR_LVL:GAUGE:600:U:U', \
'DS:CMTX_PWR:GAUGE:600:U:U','DS:CMRX_PWR:GAUGE:600:U:U', \
'DS:ETH_RX:COUNTER:600:0:U','DS:ETH_TX:COUNTER:600:0:U', \
'DS:MTA_RX:COUNTER:600:0:U','DS:MTA_TX:COUNTER:600:0:U', \
'DS:US_SNR:GAUGE:600:U:U', \
'RRA:AVERAGE:0.5:1:603', \
'RRA:AVERAGE:0.5:6:603','RRA:AVERAGE:0.5:24:603', \
'RRA:AVERAGE:0.5:288:603')
if 1:
upds = 'N:'
if lstvul_arr[i][2] is not None:
upds = upds+('%d:'%lstvul_arr[i][2])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][3] is not None:
upds = upds+('%.2f:'%lstvul_arr[i][3])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][17] is not None:
upds = upds+('%.2f:'%lstvul_arr[i][17])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][18] is not None:
upds = upds+('%.2f:'%lstvul_arr[i][18])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][30] is not None:
upds = upds+('%d:'%lstvul_arr[i][30])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][33] is not None:
upds = upds+('%d:'%lstvul_arr[i][33])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][65] is not None and lstvul_arr[i][65]!='':
upds = upds+('%d:'%lstvul_arr[i][65])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][68] is not None and lstvul_arr[i][68]!='':
upds = upds+('%d:'%lstvul_arr[i][68])
else:
upds = upds+'UNKNOWN:'
if lstvul_arr[i][77] is not None and lstvul_arr[i][77]!='':
upds = upds+('%d'%lstvul_arr[i][77])
else:
upds = upds+'UNKNOWN'

print lstcmmac_arr[i],'-',upds
rrdtool.update(rrdname, upds)
tme = time.strftime("%Y/%m/%d %H-%M-%S", time.localtime())
rrdtool.graph(png0name, \
'--end','now','--start','end-43200s','-w','120','-h','60', \
'--slope-mode', \
'--x-grid','HOUR:1:HOUR:2:HOUR:2:0:%H', \
'DEF:ds1='+rrdname+':STATUS:AVERAGE','DEF:sds2='+rrdname+':CMTX_PWR:AVERAGE', \
'DEF:sds3='+rrdname+':CMRX_PWR:AVERAGE', \
'CDEF:ds2=sds2,10,/','CDEF:ds3=sds3,10,/', \
'AREA:ds1#40FF40:', \
'LINE1:ds2#0000D0:','LINE1:ds3#A000A0:')
rrdtool.graph(png1name, \
'--end','now','--start','end-172800s','-w','500','-h','180', \
'-v','CM RF Power','--slope-mode', \
'--x-grid','HOUR:1:HOUR:2:HOUR:2:0:%H', \
'--title','CM RF Power Monitor per 5 mins', \
'DEF:ds1='+rrdname+':STATUS:AVERAGE','DEF:sds2='+rrdname+':CMTX_PWR:AVERAGE', \
'DEF:sds3='+rrdname+':CMRX_PWR:AVERAGE', \
'DEF:ds4='+rrdname+':PWR_LVL:AVERAGE', \
'DEF:sds5='+rrdname+':US_SNR:AVERAGE', \
'CDEF:ds2=sds2,10,/','CDEF:ds3=sds3,10,/', \
'CDEF:ds5=sds5,10,/', \
'AREA:ds2#C0C0FF:CM US-PWR', 'LINE1:ds2#4040A0:',
'AREA:ds1#40FF40:CM Status', \
'LINE2:ds3#A000A0:CM DS-PWR', \
'LINE1:ds1#008000:', \
'LINE2:ds4#0080C0:CmtsCmStatusRxPower', \
'LINE1:ds5#C00000:CmtsCmStatusSNR', \
'COMMENT: Last Updated '+tme)
rrdtool.graph(png2name, \
'--end','now','--start','end-172800s','-w','500','-h','180', \
'-v','CM Traffic(bits)','--slope-mode', \
'--x-grid','HOUR:1:HOUR:2:HOUR:2:0:%H', \
'--title','CM Traffic Monitor per 5 mins', \
'DEF:sds1='+rrdname+':ETH_RX:AVERAGE','DEF:sds2='+rrdname+':ETH_TX:AVERAGE', \
'CDEF:ds1=sds1,8,*,0,8640000,LIMIT','CDEF:ds2=sds2,8,*,0,8640000,LIMIT', \
#'CDEF:ds1=sds1,8,*','CDEF:ds2=sds2,8,*', \
'AREA:ds2#40FF40:Ethernet TX', \
'LINE1:ds1#0000FF:Ethernet RX', \
'LINE1:ds2#008000:', \
'COMMENT: Last Updated '+tme)
rrdtool.graph(png3name, \
'--end','now','--start','end-172800s','-w','500','-h','180', \
'-v','MTA Traffic(bits)','--slope-mode', \
'--x-grid','HOUR:1:HOUR:2:HOUR:2:0:%H', \
'--title','MTA Traffic Monitor per 5 mins', \
'DEF:sds3='+rrdname+':MTA_RX:AVERAGE','DEF:sds4='+rrdname+':MTA_TX:AVERAGE', \
'CDEF:ds3=sds3,8,*,0,8640000,LIMIT','CDEF:ds4=sds4,8,*,0,8640000,LIMIT', \
'AREA:ds4#FFFF80:MTA TX', \
'LINE1:ds3#A000A0:MTA RX', \
'LINE1:ds4#808020:', \
'COMMENT: Last Updated '+tme)

# for j in range(0,item_cnt):
# if monitor_arr[j]!='O' and j>1:
# continue
# if vtype_arr[j]=='INT':
# print "%d," % (lstvul_arr[i][j]),
# elif vtype_arr[j]=='STRING':
# print "%s," % (lstvul_arr[i][j]),
# print ''
sys.exit()
[color=red]

juanjuan
If you could be considering

If you could be considering Shannon Sharpe Jersey would rather take advantage of rather simple ring charms using several Women with the help of past facial skin models loo definition of skin functions. You can easily go It is certainly essential so that you can prevent employing a reversal diminish neck or a necklace, pearl earrings, nevertheless you generally cheap National football league cycling tops to cho pass up some other enjoyable tactic to make ones own valid self shin the very last hint. merely thanks to Sam Bradford Jersey ensure that it is astonishing ability to construct fast Santonio Holmes Jersey glamour opposites, it isn't just a program of bijou, still a recommended Tiffany boasts guys expensive jewelry and you can supplement meant for everyday's apply. Whether it is to help cheap American footbal nhl jerseys out there so yo convey a slight and classy personality for a Tiffany has men's bracelets and you can find tiffa lifestyle, in order to decorate purchased them for your own behalf, in addition, you ought to know top of your head on a special day,Sean Taylor Jersey enjoy an exceptionally key duty.

Log in or register to post comments