|
|
@@ -12,7 +12,7 @@ from django.contrib import messages
|
|
12
|
12
|
exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
|
|
13
|
13
|
exfo.login()
|
|
14
|
14
|
|
|
15
|
|
-from datetime import datetime
|
|
|
15
|
+from datetime import datetime, timedelta
|
|
16
|
16
|
from dateutil import tz
|
|
17
|
17
|
|
|
18
|
18
|
mkt = Mikrotik()
|
|
|
@@ -314,30 +314,59 @@ def gen_report_notebook():
|
|
314
|
314
|
to_zone = tz.gettz('Asia/Bangkok')
|
|
315
|
315
|
|
|
316
|
316
|
c = db['fixed_results'].find()
|
|
|
317
|
+ c2 = db['ip_address']
|
|
|
318
|
+
|
|
317
|
319
|
data = []
|
|
318
|
320
|
for i in c:
|
|
319
|
321
|
#pprint(i['header'])
|
|
320
|
322
|
res = dict(zip(i['header'], i['results']))
|
|
321
|
323
|
utc = datetime.fromtimestamp(int(i['ids']['time_stamp'])/1000000000)
|
|
322
|
324
|
utc = utc.replace(tzinfo=from_zone)
|
|
|
325
|
+ yest = utc - timedelta(minutes=4)
|
|
323
|
326
|
dt = utc.astimezone(to_zone)
|
|
324
|
327
|
|
|
325
|
328
|
d = {'header': i['header'], 'results': i['results'], 'output': res, 'params': i['parameters'], 'ts': i['ids']['time_stamp'],
|
|
326
|
329
|
'dt': str(dt), 'test_type_name': i['ids']['fixed_results_url']}
|
|
|
330
|
+
|
|
|
331
|
+
|
|
|
332
|
+
|
|
327
|
333
|
d.update(i['names'])
|
|
|
334
|
+ if not d['sla_name']:
|
|
|
335
|
+ continue
|
|
|
336
|
+
|
|
|
337
|
+ sla_splt = d['sla_name'].split('-')
|
|
|
338
|
+ if len(sla_splt) > 1:
|
|
|
339
|
+ reg_cond = f'(?=^pppoe-out)(?=.*{sla_splt[0]})(?=.*{sla_splt[-1]})'
|
|
|
340
|
+
|
|
|
341
|
+ pprint(reg_cond)
|
|
|
342
|
+ temp_addr = list(c2.find({'ts': {'$lte': utc, '$gte': yest }, 'interface': {'$regex': reg_cond, '$not': { '$regex': '^pppoe-out5'}, '$options': 'i' }, 'invalid': 'false'}).sort("ts", -1))
|
|
|
343
|
+ pprint("temp addr")
|
|
|
344
|
+ pprint(d['sla_name'])
|
|
|
345
|
+ # //pprint(temp_addr)
|
|
|
346
|
+ target_address = None
|
|
|
347
|
+ if temp_addr:
|
|
|
348
|
+ target_address = temp_addr[0]
|
|
|
349
|
+
|
|
|
350
|
+ if target_address:
|
|
|
351
|
+ pprint("Found Target")
|
|
|
352
|
+ pprint(target_address)
|
|
|
353
|
+ d.update(target_address)
|
|
|
354
|
+
|
|
328
|
355
|
#res.update(i['ids'])
|
|
329
|
356
|
#res.update(i[])
|
|
330
|
357
|
#pprint(d)
|
|
331
|
358
|
data.append(d)
|
|
|
359
|
+
|
|
332
|
360
|
df0 = pd.DataFrame(data)
|
|
333
|
361
|
df0 = df0.explode(["header", "results"])
|
|
334
|
|
- df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name"]]
|
|
|
362
|
+ df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name", "network", "address", "interface"]]
|
|
335
|
363
|
df1 = df1.query('sla_name == sla_name')
|
|
336
|
364
|
#pprint(df1['sla_name'].unique())
|
|
337
|
365
|
|
|
338
|
366
|
#df1['results_text'] = df1['results'].apply(con_human)
|
|
339
|
367
|
df1['results_text'] = df1.apply(con_human, axis=1)
|
|
340
|
|
- table = df1.pivot(index=['sla_name', 'dt', 'verifier_name'],columns=['test_display_name','header'], values='results_text').sort_values(by=['sla_name', 'dt'], ascending=[True, False])
|
|
|
368
|
+ df1['network_str'] = df1['network'] + " / " + df1['interface']
|
|
|
369
|
+ table = df1.pivot(index=['sla_name', 'dt', 'verifier_name', 'network_str'],columns=['test_display_name','header'], values='results_text').sort_values(by=['sla_name', 'dt'], ascending=[True, False])
|
|
341
|
370
|
table = table.dropna(how='all', axis=0)
|
|
342
|
371
|
return (table,df1)
|
|
343
|
372
|
|
|
|
@@ -367,6 +396,9 @@ def gen_report(request):
|
|
367
|
396
|
vr_filter = ", ".join(f"'{w}'" for w in vr_name)
|
|
368
|
397
|
table = table.query(f"verifier_name in ({vr_filter})")
|
|
369
|
398
|
|
|
|
399
|
+ table = table.dropna(how='all', axis=0)
|
|
|
400
|
+ table = table.dropna(how='all', axis=1)
|
|
|
401
|
+
|
|
370
|
402
|
gen_report = request.GET.get('genReport', None)
|
|
371
|
403
|
|
|
372
|
404
|
report_link = None
|