from django.shortcuts import render
from backend.mongodb import db
from exfo.lib import Exfo, Mikrotik
from pprint import pprint
from ttp import ttp
from django.http import JsonResponse
exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
exfo.login()
mkt = Mikrotik()
def index(request):
collection = db['mascot']
mascot_details = collection.find({})
rapi = exfo.list_api()
sla = exfo.call_api("sla")
data_to_parse = """
interface Loopback0
description Router-id-loopback
ip address 192.168.0.113/24
!
interface Vlan778
description CPE_Acces_Vlan
ip address 2002::fd37/124
ip vrf CPE1
!
"""
ttp_template = """
interface {{ interface }}
ip address {{ ip }}/{{ mask }}
description {{ description }}
ip vrf {{ vrf }}
"""
template = """
interface Loopback0
description Router-id-loopback
ip address 192.168.0.113/24
!
interface Loopback1
description Router-id-loopback
ip address 192.168.0.1/24
!
interface Vlan778
ip address 2002::fd37/124
ip vrf CPE1
!
interface Vlan779
ip address 2002::bbcd/124
ip vrf CPE2
!
interface {{ interface | contains("Loop") }}
ip address {{ ip }}/{{ mask }}
description {{ description }}
ip vrf {{ vrf }}
interface {{ interface | contains("Vlan") }}
ip address {{ ip }}/{{ mask }}
description {{ description }}
ip vrf {{ vrf }}
"""
parser = ttp(template=template)
parser.parse()
# form excel table and save in file
parser.result(
format="excel",
filename="excel_out_test_excel_formatter_update.xlsx",
returner="file",
update=True,
url="./Output/",
table=[
{
"headers": ["interface", "ip", "mask", "vrf", "description"],
"path": "loopbacks_new",
"key": "interface",
"tab_name": "loopbacks_new",
},
{"path": "vlans"},
],
)
# create parser object and parse data using template:
# parser = ttp(data=data_to_parse, template=ttp_template)
# parser.parse()
# # print result in JSON format
# results = parser.result(format='xlsx')[0]
# pprint(results)
try:
mk_ips = mkt.call_remote("ip/route")
mk_address = mkt.call_remote("ip/address")
except:
mk_ips = []
mk_address = []
return render(request, 'backend/index.html', {'objs': mascot_details, 'output': rapi.json(),\
'sla': sla.json(), 'mk_ips': mk_ips, 'mk_address': mk_address})
#Define Collection
def remote(request):
cmd = request.GET.get('cmd', None)
# exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
# exfo.login()
r = exfo.call_remote_api(cmd)
pprint(r.json())
# return JsonResponse(r.json())
return render(request, 'backend/remote_render.html', {'res': r})
def service_status(request):
cmd = request.GET.get('cmd', None)
import urllib.parse
section = request.GET.get('section', 'all')
# exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
# exfo.login()
cmd = urllib.parse.unquote(cmd)
pprint(f" cmd = {cmd}")
r = exfo.call_remote_api(cmd)
pprint(r.json())
# return JsonResponse(r.json())
return render(request, 'backend/service_status.html', {'res': r, 'section': section})
def reports(request):
days = range(1,31)
sla = exfo.call_api("sla")
sla_json = sla.json()
sla_results = {}
test_status = {}
service_results = {}
for r in sla_json['result']:
sla_uri = r['ids']['sla_uri']
t = exfo.call_remote_api(sla_uri).json()
sla_results[r['ids']['sla_name']] = t
t = exfo.call_remote_api(sla_uri).json()
service_results[r['ids']['sla_name']] = []
for si in t['result']['service_instances']:
service_results[r['ids']['sla_name']].append(exfo.call_remote_api(si['service_uri']).json()['result'])
try:
t2 = exfo.call_remote_api(t['result']['tests'][-1]['test_status_uri']).json()
test_status[r['ids']['sla_name']] = t2
except:
test_status[r['ids']['sla_name']] = {}
return render(request, 'backend/reports2.html', {'days': days, 'sla': sla.json(), 'sla_results': sla_results, 'test_status': test_status, 'service_results': service_results })