Skip to content

Instantly share code, notes, and snippets.

@ryogrid
Created July 21, 2019 07:48
Show Gist options
  • Save ryogrid/a401405bac5f57018802451ed663da57 to your computer and use it in GitHub Desktop.
Save ryogrid/a401405bac5f57018802451ed663da57 to your computer and use it in GitHub Desktop.
SNMPでスイッチのポートごとの転送量を取得しAmbientに送信するPythonコード
import time
import pysnmp.hlapi
import ambient
import traceback
import sys
SNMP_COMMUNITY = "xxxxxxxxx"
IP = "115.179.143.xxx"
PORT = 161
IF_IN_OCTETS_OID_PREFIX = "1.3.6.1.2.1.2.2.x.xx."
IF_OUT_OCTETS_OID_PREFIX = "1.3.6.1.2.1.2.2.x.xx."
AMBIENT_CHANNEL_ID = 12345
AMBIENT_WRITE_KEY = "xxxxxxxxxxxxxx"
SEND_INTERVAL = 30.0
def getObjectIntegerFromOID(oid_string):
g = pysnmp.hlapi.getCmd(
pysnmp.hlapi.SnmpEngine(),
pysnmp.hlapi.CommunityData(SNMP_COMMUNITY, mpModel=1),
pysnmp.hlapi.UdpTransportTarget((IP, PORT)),
pysnmp.hlapi.ContextData(),
pysnmp.hlapi.ObjectType(pysnmp.hlapi.ObjectIdentity(oid_string))
)
errIndication, errorStatus, errorIndex, varBinds = next(g)
return int(str(varBinds[0]).split(" ")[2])
def genAmbientSendableDicFromList(integer_list):
ret_dict = {}
for idx in range(0, len(integer_list)):
ret_dict["d" + str(idx + 1)] = integer_list[idx]
return ret_dict
am = ambient.Ambient(AMBIENT_CHANNEL_ID, AMBIENT_WRITE_KEY)
last_accumulates = [-1] * 5
while True:
try:
send_values = []
for port_id in range(49153, 49156):
tmp_val = getObjectIntegerFromOID(IF_IN_OCTETS_OID_PREFIX + str(port_id)) + \
getObjectIntegerFromOID(IF_OUT_OCTETS_OID_PREFIX + str(port_id))
last_val = last_accumulates[port_id - 49153]
if last_val != -1:
send_values.append((tmp_val - last_accumulates[port_id - 49153]) / SEND_INTERVAL)
last_accumulates[port_id - 49153] = tmp_val
tmp_val = getObjectIntegerFromOID(IF_IN_OCTETS_OID_PREFIX + "49159")
last_val = last_accumulates[3]
if last_val != -1:
send_values.append((tmp_val - last_accumulates[3]) / SEND_INTERVAL)
last_accumulates[3] = tmp_val
tmp_val = getObjectIntegerFromOID(IF_OUT_OCTETS_OID_PREFIX + "49159")
last_val = last_accumulates[4]
if last_val != -1:
send_values.append((tmp_val - last_accumulates[4]) / SEND_INTERVAL)
last_accumulates[4] = tmp_val
if len(send_values) == 5:
send_dict = genAmbientSendableDicFromList(send_values)
#print(send_dict)
r = am.send(send_dict)
print(r)
time.sleep(SEND_INTERVAL)
except KeyboardInterrupt:
sys.exit(0)
except:
traceback.print_exc()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment