|
|
@@ -1,4 +1,4 @@
|
|
1
|
|
-from django.shortcuts import render
|
|
|
1
|
+from django.shortcuts import render, redirect
|
|
2
|
2
|
from backend.mongodb import db
|
|
3
|
3
|
from exfo.lib import Exfo, Mikrotik
|
|
4
|
4
|
from pprint import pprint
|
|
|
@@ -7,6 +7,7 @@ from ttp import ttp
|
|
7
|
7
|
from django.http import JsonResponse, HttpResponse
|
|
8
|
8
|
from datetime import datetime
|
|
9
|
9
|
from celery import shared_task
|
|
|
10
|
+from django.contrib import messages
|
|
10
|
11
|
|
|
11
|
12
|
exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
|
|
12
|
13
|
exfo.login()
|
|
|
@@ -274,5 +275,84 @@ def dump_fixed_results(request):
|
|
274
|
275
|
results = col.find({})
|
|
275
|
276
|
data = dumps(list(results), indent=4)
|
|
276
|
277
|
data = {'msg': 'done'}
|
|
|
278
|
+ redir = request.GET.get('redir', None)
|
|
|
279
|
+ if redir:
|
|
|
280
|
+ messages.success(request, 'Dump Fixed Results')
|
|
|
281
|
+ return redirect(redir)
|
|
277
|
282
|
# return HttpResponse(data, content_type='application/json')
|
|
278
|
283
|
return JsonResponse(data)
|
|
|
284
|
+
|
|
|
285
|
+import humanize
|
|
|
286
|
+
|
|
|
287
|
+def con_human(r):
|
|
|
288
|
+ try:
|
|
|
289
|
+ '''
|
|
|
290
|
+ if 'time' in r['header'].lower():
|
|
|
291
|
+ return r['results']
|
|
|
292
|
+ '''
|
|
|
293
|
+ x = r['results']
|
|
|
294
|
+ n = int(x)
|
|
|
295
|
+ if n > 1000:
|
|
|
296
|
+ return humanize.naturalsize(n,gnu=True)
|
|
|
297
|
+ else:
|
|
|
298
|
+ return n
|
|
|
299
|
+ except:
|
|
|
300
|
+ return r['results']
|
|
|
301
|
+def gen_report_notebook():
|
|
|
302
|
+ from datetime import datetime
|
|
|
303
|
+ import pandas as pd
|
|
|
304
|
+
|
|
|
305
|
+ c = db['fixed_results'].find()
|
|
|
306
|
+ data = []
|
|
|
307
|
+ for i in c:
|
|
|
308
|
+ #pprint(i['header'])
|
|
|
309
|
+ res = dict(zip(i['header'], i['results']))
|
|
|
310
|
+ d = {'header': i['header'], 'results': i['results'], 'output': res, 'params': i['parameters'], 'ts': i['ids']['time_stamp'],
|
|
|
311
|
+ 'dt': datetime.fromtimestamp(int(i['ids']['time_stamp'])/1000000000), 'test_type_name': i['ids']['fixed_results_url']}
|
|
|
312
|
+ d.update(i['names'])
|
|
|
313
|
+ #res.update(i['ids'])
|
|
|
314
|
+ #res.update(i[])
|
|
|
315
|
+ #pprint(d)
|
|
|
316
|
+ data.append(d)
|
|
|
317
|
+ df0 = pd.DataFrame(data)
|
|
|
318
|
+ df0 = df0.explode(["header", "results"])
|
|
|
319
|
+ df1 = df0[["header", "results", "dt", "sla_name", "test_display_name"]]
|
|
|
320
|
+ df1 = df1.query('sla_name == sla_name')
|
|
|
321
|
+ #pprint(df1['sla_name'].unique())
|
|
|
322
|
+
|
|
|
323
|
+ #df1['results_text'] = df1['results'].apply(con_human)
|
|
|
324
|
+ df1['results_text'] = df1.apply(con_human, axis=1)
|
|
|
325
|
+ table = df1.pivot(index=['sla_name', 'dt'],columns=['test_display_name','header'], values='results_text').sort_values(by=['sla_name', 'dt'], ascending=[True, False])
|
|
|
326
|
+ table = table.dropna(how='all', axis=0)
|
|
|
327
|
+ return (table,df1)
|
|
|
328
|
+
|
|
|
329
|
+def gen_report(request):
|
|
|
330
|
+ pprint("report notebook ...")
|
|
|
331
|
+ table,df = gen_report_notebook()
|
|
|
332
|
+ slas = list(df['sla_name'].unique())
|
|
|
333
|
+ sla_name = request.GET.getlist('sla_name')
|
|
|
334
|
+
|
|
|
335
|
+ pprint("--- sla_name ---")
|
|
|
336
|
+ pprint(sla_name)
|
|
|
337
|
+ if len(sla_name) > 0:
|
|
|
338
|
+ sla_filter = ", ".join(f"'{w}'" for w in sla_name)
|
|
|
339
|
+ table = table.query(f"sla_name in ({sla_filter})")
|
|
|
340
|
+ gen_report = request.GET.get('genReport', None)
|
|
|
341
|
+
|
|
|
342
|
+ report_link = None
|
|
|
343
|
+ if gen_report:
|
|
|
344
|
+ import time
|
|
|
345
|
+ ts = int(time.time())
|
|
|
346
|
+ fn = f"report_{ts}.xlsx"
|
|
|
347
|
+ table.to_excel(f'/code/media/{fn}')
|
|
|
348
|
+ report_link = f'/media/{fn}'
|
|
|
349
|
+
|
|
|
350
|
+ try:
|
|
|
351
|
+ mk_ips = mkt.call_remote("ip/route")
|
|
|
352
|
+ mk_address = mkt.call_remote("ip/address")
|
|
|
353
|
+ except:
|
|
|
354
|
+ mk_ips = []
|
|
|
355
|
+ mk_address = []
|
|
|
356
|
+ return render(request, 'backend/gen_report.html', {'tbl': table.to_html(\
|
|
|
357
|
+ classes=["table", "table-striped", "table-bordered", "align-middle"],\
|
|
|
358
|
+ table_id="report_tbl"), 'slas': slas, 'report_link': report_link, 'mk_ips': mk_ips, 'mk_address': mk_address})
|