Select Git revision
highTransitions.py
rick.mollard authored
highTransitions.py 6.21 KiB
from netmiko import ConnectHandler
from getpass import getpass
import requests
import urllib3
import socket
import re
import time
import getpass
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
###########################################################################
print(" 1 = UNL-City \n 2 = UNL-East \n 3 = UNO \n 4 = UNK \n Select Campus:")
campus = input()
print(f"Campus Selected: {campus}")
print("----------------------------------")
if campus == "1":
file = [line.strip() for line in open("unlCitySwitches-cx.txt", 'r')]
if campus == "2":
file = [line.strip() for line in open("unlEastSwitches-cx.txt", 'r')]
if campus == "3":
file = [line.strip() for line in open("unoSwitches-cx.txt", 'r')]
if campus == "4":
file = [line.strip() for line in open("unkSwitches-cx.txt", 'r')]
#print(file[])
#file.close()
##########################################################################
print("Enter Username:")
Ausername = input()
print("Enter Password:")
Apassword = getpass.getpass()
creds = {"username": {Ausername}, "password": {Apassword}}
file1 = open("highTransitions.txt", "w")
for selectIP in file:
ip_add = selectIP
hostname = socket.getfqdn(ip_add)
print(f"Login from: {hostname} {ip_add}")
file1.writelines(f"Login from: {hostname} {ip_add}\n")
session = requests.session()
# create sessions object
def get_logs(self):
try:
# Login to API and set initial Variables
login = session.post(f"https://{self}/rest/v1/login", data=creds, verify=False)
transitions = 10000
vsfMember = 1
Switch = 1
SwitchPort = 1
# Check to see how many switches are in stack and convert to string
get_vsf = session.get(f"https://{self}/rest/v10.04/system/vsf_members?attributes=id&depth=2&selector=status&count=true")
vsfMember = re.findall(r'\d+',f"{get_vsf.json()}")
str_vsfMember = str(vsfMember[0])
# Check the model of the switch
get_model = session.get(f"https://{self}/rest/v10.04/system/subsystems/chassis,{Switch}?attributes=part_number_cfg&depth=4")
vsfModel = re.findall(r'\d+',f"{get_model.json()}")
#Run Program on all switches and ports to find High link trasitions.
while Switch <= int(str_vsfMember[0]):
if f"{str(vsfModel)}" == "['661']" or f"{str(vsfModel)}" == "['659']": # run for all 48 port switchs
while SwitchPort < 49:
get_log = session.get(f"https://{self}/rest/v10.04/system/interfaces/{Switch}%2F1%2F{SwitchPort}?attributes=link_resets&depth=2&selector=statistics")
LinkTransitions = re.findall(r'\d+',f"{get_log.json()}")
str_LinkTransitions = str(LinkTransitions[0])
if transitions <= int(str_LinkTransitions):
get_lldp = session.get(f"https://{self}/rest/v10.04/system/interfaces/{Switch}%2F1%2F{SwitchPort}/lldp_neighbors?attributes=neighbor_info&depth=4&selector=status&filter=")
lldpModel = f"{get_lldp.json()}"
split_lldpModel = lldpModel.split(", ")
count=3
while count < len(split_lldpModel): # This handles errors when no lldp info is found.
lsplit_lldp = lldpModel.split("'chassis_description': '",1)[1]
final_lldp = lsplit_lldp.split("', ",1)[0]
count += 1
print(f"Port: {Switch}/1/{SwitchPort} {str_LinkTransitions} --- {final_lldp}")
file1.write(f"Port: {Switch}/1/{SwitchPort} {str_LinkTransitions}\n")
final_lldp = "No LLDP Info" # Default value if no lldp info is retreived
SwitchPort += 1
Switch += 1
SwitchPort = 1
get_model = session.get(f"https://{self}/rest/v10.04/system/subsystems/chassis,{Switch}?attributes=part_number_cfg&depth=4")
vsfModel = re.findall(r'\d+',f"{get_model.json()}")
else:
while Switch <= int(str_vsfMember[0]): # Run for all 24 port switches
get_model = session.get(f"https://{self}/rest/v10.04/system/subsystems/chassis,{Switch}?attributes=part_number_cfg&depth=4")
vsfModel = re.findall(r'\d+',f"{get_model.json()}")
while SwitchPort < 25:
get_log = session.get(f"https://{self}/rest/v10.04/system/interfaces/{Switch}%2F1%2F{SwitchPort}?attributes=link_resets&depth=2&selector=statistics")
LinkTransitions = re.findall(r'\d+',f"{get_log.json()}")
str_LinkTransitions = str(LinkTransitions[0])
if transitions <= int(str_LinkTransitions):
print(f"Port: {Switch}/1/{SwitchPort} {str_LinkTransitions} --- {final_lldp}")
file1.write(f"Port: {Switch}/1/{SwitchPort} {str_LinkTransitions}\n")
SwitchPort += 1
Switch += 1
SwitchPort = 1
get_model = session.get(f"https://{self}/rest/v10.04/system/subsystems/chassis,{Switch}?attributes=part_number_cfg&depth=4")
vsfModel = re.findall(r'\d+',f"{get_model.json()}")
logout = session.post(f"https://{self}/rest/v1/logout")
print(f"Logout from: {hostname} {ip_add}")
file1.write(f"Logout from: {hostname} {ip_add}\n")
except requests.exceptions.RequestException as e:
print("Switch is not responding-----> " + ip_add)
print("Switch is not responding-----> " + ip_add)
print("Switch is not responding-----> " + ip_add)
file1.write("Switch is not responding-----> " + ip_add + "\n")
###############################################################################
# Starts the program at def get_logs(self)
get_logs(ip_add)