Python
The following examples have been tested with Python 3. In order to authenticate with Pathfinder Server you need to provide an API key.
Check connectivity with PFS (authenticated and non-authenticated endpoints)
import json
from types import SimpleNamespace
from urllib.error import HTTPError
import requests
import urllib3
baseUrl = "https://localhost:8087/api/v1.0/" # <- address of your Pathfinder-Server
apiKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # <- put your API-key here
endpointStatus = "info/status"
endpointPing = "info/status/ping"
# get a deserialized result from PFS
def pfs_get(endpoint: str):
try:
get_result = requests.get(baseUrl + endpoint,
verify=False, headers={'Authorization': 'Bearer ' + apiKey})
except HTTPError as http_error:
print(f"HTTP error occured: {http_error}")
except Exception as exc:
print(f"Exception occured: {exc}")
else:
if get_result.status_code == 200:
result = json.loads(
get_result.text, object_hook=lambda d: SimpleNamespace(**d))
return result
elif get_result.status_code == 401:
print("Authentication error (401)")
return
else:
print(f"An error occured. Status code {get_result.status_code}")
return
def get_success(object):
if object:
return "OK"
else:
return "Failed"
def main():
# suppresses warning about self signed certificate, don't use in production
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
print("Call without authorization...")
print(get_success(pfs_get(endpointStatus)))
print("Call with authorization...")
print(get_success(pfs_get(endpointPing)))
return 0
if __name__ == "__main__":
main()
Example output:
Call without authorization...
OK
Call with authorization...
OK
Display the network paths of a port
import json
from types import SimpleNamespace
from urllib.error import HTTPError
import requests
import urllib3
baseUrl = "https://localhost:8087/api/v1.0/" # <- address of your Pathfinder-Server
apiKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" # <- put your API-key here
endpointNetworkPaths = "infrastructure/ports/{portId}/networkpath"
# get a deserialized result from PFS
def pfs_get(endpoint: str):
try:
get_result = requests.get(baseUrl + endpoint,
verify=False, headers={'Authorization': 'Bearer ' + apiKey})
except HTTPError as http_error:
print(f"HTTP error occured: {http_error}")
except Exception as exc:
print(f"Exception occured: {exc}")
else:
if get_result.status_code == 200:
result = json.loads(
get_result.text, object_hook=lambda d: SimpleNamespace(**d))
return result
elif get_result.status_code == 401:
print("Authentication error (401)")
return
else:
print(f"An error occured. Status code {get_result.status_code}")
return
# output details of a nwp
def print_nwp_info(nwp):
print(f"Id: {nwp.NetworkPathId}")
print(f"Name: {nwp.NetworkPathName}")
print(f"Start-Location: {nwp.StartComponentInfo.LocationPath}")
print(f"Start-Device: {nwp.StartComponentInfo.ComponentPath}")
print(f"Start-Port: {nwp.StartPortName} #{nwp.StartPortNumber}")
print(f"End-Location: {nwp.EndComponentInfo.LocationPath}")
print(f"End-Device: {nwp.EndComponentInfo.ComponentPath}")
print(f"End-Port: {nwp.EndPortName} #{nwp.EndPortNumber}")
print(f"End-Room: {nwp.EndComponentInfo.RoomName}")
def main():
# suppresses warning about self signed certificate, don't use in production
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
portId = 26375
networkPaths = pfs_get(endpointNetworkPaths.format(portId=portId))
if (networkPaths):
nwpCount = len(networkPaths.Items)
if nwpCount > 0:
print(f"Number of network paths: {nwpCount}")
for nwp in networkPaths.Items:
print_nwp_info(nwp)
return 0
else:
print(f"No network path found for port {portId}")
return 0
return -1
if __name__ == "__main__":
main()
Example output:
Number of network paths: 1
Id: 149
Name: NWP Port 17 <-> LAN
Start-Location: Universität>Rechenzentrum>EG-EG>EVT-0001
Start-Device: RACK-01>SW-Nortel ERS 4548 GT-PWR-10
Start-Port: Port 17 #17
End-Location: Universität>Rechenzentrum>EG-EG>0010-0010
End-Device: PC-121
End-Port: LAN #1
End-Room: 0010