Guest User

pysnmp twisted

a guest
Oct 23rd, 2013
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.97 KB | None | 0 0
  1. from twisted.internet import reactor
  2. from twisted.internet import defer, task
  3. from pysnmp.entity import engine, config
  4. from pysnmp.carrier.twisted import dispatch
  5. from pysnmp.carrier.twisted.dgram import udp
  6. from pysnmp.entity.rfc3413.twisted import cmdgen
  7.  
  8.  
  9. import __webimport__
  10. import tools.config
  11. from tools.database import makedsn
  12. import psycopg2
  13.  
  14.  
  15. def cbFun(cbCtx):
  16.     (errorIndication, errorStatus, errorIndex, varBinds) = cbCtx
  17.     for oid, val in varBinds:
  18.         print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
  19.  
  20.  
  21. def parallel(iterable, count, callable, *args, **named):
  22.     coop = task.Cooperator()
  23.     work = (callable(elem, *args, **named) for elem in iterable)
  24.     return defer.DeferredList([coop.coiterate(work) for i in xrange(count)])
  25.  
  26.  
  27. def fetch(host, snmpEngine, getCmdGen):
  28.     id, ip, community, hc = host
  29.     config.addV1System(snmpEngine, 'test-agent', community)
  30.     config.addTargetAddr(
  31.                      snmpEngine, 'myRouter', config.snmpUDPDomain,
  32.                      (ip, 161), 'myParams', timeout=1
  33.     )
  34.     df = getCmdGen.sendReq(snmpEngine, 'myRouter',
  35.                            (('1.3.6.1.2.1.1.1.0', None), ))
  36.     df.addCallback(cbFun)
  37.     return df
  38.  
  39. dsn = makedsn(tools.config.main_db)
  40. connection = psycopg2.connect(dsn)
  41. cursor = connection.cursor()
  42. cursor.execute("""SELECT e.id, e.ip, e.snmpcomm, e.hccnt
  43.           FROM snmp_ports sp, equipment e
  44.           WHERE e.snmp = 'Y' and sp.equipment = e.id
  45.           GROUP BY e.id,e.ip,e.snmpcomm,e.hccnt
  46.           ORDER BY e.id limit 4000""")
  47. hosts = cursor.fetchall()
  48.  
  49. snmpEngine = engine.SnmpEngine()
  50. config.addTargetParams(snmpEngine, 'myParams', 'test-agent', 'noAuthNoPriv', 1)
  51. # Transport
  52. config.addSocketTransport(snmpEngine, udp.domainName,
  53.                           udp.UdpTwistedTransport().openClientMode())
  54.  
  55. finished = parallel(hosts, 100, fetch, snmpEngine, cmdgen.GetCommandGenerator())
  56. finished.addCallback(lambda ign: reactor.stop())
  57. reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment