62 lines
1.4 KiB
Python
62 lines
1.4 KiB
Python
import json
|
|
from flask import Flask, request
|
|
from m02_files.l_00_inventory import get_inventory
|
|
import napalm
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
@app.route("/inventory")
|
|
def inventory():
|
|
return json.dumps(get_inventory())
|
|
|
|
|
|
@app.route("/interface_counters")
|
|
def interface_counters():
|
|
|
|
device_name = request.args.get("device")
|
|
device_type = request.args.get("type")
|
|
port = request.args.get("port")
|
|
username = request.args.get("username")
|
|
password = request.args.get("password")
|
|
|
|
result, data = get_intf_counters(
|
|
device_name=device_name,
|
|
device_type=device_type,
|
|
credentials={"username": username, "password": password},
|
|
port=int(port),
|
|
)
|
|
if result != "success":
|
|
return data, 406
|
|
else:
|
|
return data, 200
|
|
|
|
|
|
@app.route("/device_status")
|
|
def device_status():
|
|
return "Hello, Device Status!"
|
|
|
|
|
|
def get_intf_counters(device_name, device_type, port, credentials):
|
|
|
|
if device_type == "csr":
|
|
driver = napalm.get_network_driver("ios")
|
|
else:
|
|
return "error", "getting counters supported only for CSR devices"
|
|
|
|
device = driver(
|
|
hostname=device_name,
|
|
username=credentials["username"],
|
|
password=credentials["password"],
|
|
optional_args={"port": port},
|
|
)
|
|
|
|
device.open()
|
|
counters = device.get_interfaces_counters()
|
|
return "success", json.dumps(counters)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run()
|