So I am working on an API call to disable ports that have not sent/received traffic for the last 15days. Got everything working correctly with my test environment, went to prod and noticed I'm pulling a lot of useless info. So i figured out that the call works the way I think it should ONLY on single switches, if the switch is in the stack it pulls "fake" information.
First function is from my_meraki module that i use to store all functions.
Second is the actual call, I have the dangerous part commented out because currently if the switch is in a stack it will disable all ports as it pulls 0 for the usage. If not in a stack works perfectly. Not sure if this is an intended function or if i screwed something up or.... idk just at a loss.
# Get Switchport Status
def switchportstat(apikey, serial):
global json_swportstat
url = "https://api.meraki.com/api/v0/devices/"+serial+"/switchPortStatuses?timespan=1296000"
payload = {}
headers = {'X-Cisco-Meraki-API-Key': apikey,'Content-Type': "application/json",'cache-control': "no-cache"}
r = requests.get(url, headers=headers, data=payload)
json_swportstat = r.json()
#personal function list
import my_meraki
#Old meraki SDK from github
from meraki import meraki
current_devices = meraki.getnetworkdevices(API_KEY, netid, ORG_ID)
device_serial = [device['serial'] for device in current_devices]
device_model = [device['model'] for device in current_devices]
for serial, model in zip(device_serial, device_model):
if model in 'MS225-48FP':
my_meraki.switchportstat(API_KEY, serial)
for line in my_meraki.json_swportstat:
portid = line.get('portId')
strportid = str(portid)
portidlist = list(strportid)
portidcomb = [''.join(portidlist)]
usage = line.get('usageInKb')
total = usage.get('total')
strtotal = str(total)
totallist = list(strtotal)
totalcomb = [''.join(totallist)]
full = zip(portidcomb, totalcomb)
for port, use in full:
print(serial, port, use)
#if use is '0' and port not in ('49', '50', '51', '52', '53', '54'):
#print('disabling: ',port)