Software need for plotting signal graphs | docsis.org

You are here

Software need for plotting signal graphs

7 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]