Skip to content
Snippets Groups Projects
Select Git revision
  • 08afbf08323259ec22610ca1ec08d4d4c65e3c21
  • main default protected
  • threads
3 results

highTransitions.py

Blame
  • rick.mollard's avatar
    rick.mollard authored
    20cd977d
    History
    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)