Tum лет назад: 2
Родитель
Сommit
ee2030681c
3 измененных файлов с 39 добавлено и 7 удалено
  1. 36 4
      app/backend/views.py
  2. 2 2
      app/network_report/settings.py
  3. 1 1
      app/network_report/urls.py

+ 36 - 4
app/backend/views.py

12
 exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
12
 exfo = Exfo("administrator", "exf0w0rxC@t4dm!n")
13
 exfo.login()
13
 exfo.login()
14
 
14
 
15
-from datetime import datetime
15
+from datetime import datetime, timedelta
16
 from dateutil import tz
16
 from dateutil import tz
17
 
17
 
18
 mkt = Mikrotik()
18
 mkt = Mikrotik()
268
     temp = tt_json['result']
268
     temp = tt_json['result']
269
     for t in temp:
269
     for t in temp:
270
         tn = t['ids']['test_type_name']
270
         tn = t['ids']['test_type_name']
271
-        r = exfo.call_remote_api('/API/REST/Test/v1/FixedResults/'+tn+'?sections=all&size=0&sort=verifier_id asc,time_stamp desc&time_range={"start":"1 days  ago","end":"now"}').json()
271
+        r = exfo.call_remote_api('/API/REST/Test/v1/FixedResults/'+tn+'?sections=all&size=0&sort=verifier_id asc,time_stamp desc&time_range={"start":"2 days  ago","end":"now"}').json()
272
         #pprint(r)
272
         #pprint(r)
273
         try:
273
         try:
274
             r0 = r['result']
274
             r0 = r['result']
314
     to_zone = tz.gettz('Asia/Bangkok')
314
     to_zone = tz.gettz('Asia/Bangkok')
315
     
315
     
316
     c = db['fixed_results'].find()
316
     c = db['fixed_results'].find()
317
+    c2  = db['ip_address']
318
+
317
     data = []
319
     data = []
318
     for i in c:
320
     for i in c:
319
         #pprint(i['header'])
321
         #pprint(i['header'])
320
         res = dict(zip(i['header'], i['results']))
322
         res = dict(zip(i['header'], i['results']))
321
         utc = datetime.fromtimestamp(int(i['ids']['time_stamp'])/1000000000)
323
         utc = datetime.fromtimestamp(int(i['ids']['time_stamp'])/1000000000)
322
         utc = utc.replace(tzinfo=from_zone)
324
         utc = utc.replace(tzinfo=from_zone)
325
+        yest = utc - timedelta(minutes=4)
323
         dt = utc.astimezone(to_zone)
326
         dt = utc.astimezone(to_zone)
324
 
327
 
325
         d = {'header': i['header'], 'results': i['results'], 'output': res, 'params': i['parameters'], 'ts': i['ids']['time_stamp'], 
328
         d = {'header': i['header'], 'results': i['results'], 'output': res, 'params': i['parameters'], 'ts': i['ids']['time_stamp'], 
326
              'dt': str(dt), 'test_type_name': i['ids']['fixed_results_url']}
329
              'dt': str(dt), 'test_type_name': i['ids']['fixed_results_url']}
330
+
331
+                
332
+
327
         d.update(i['names'])
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
         #res.update(i['ids'])
355
         #res.update(i['ids'])
329
         #res.update(i[])
356
         #res.update(i[])
330
         #pprint(d)
357
         #pprint(d)
331
         data.append(d)
358
         data.append(d)
359
+
332
     df0 = pd.DataFrame(data)
360
     df0 = pd.DataFrame(data)
333
     df0 = df0.explode(["header", "results"])
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
     df1 = df1.query('sla_name == sla_name')
363
     df1 = df1.query('sla_name == sla_name')
336
     #pprint(df1['sla_name'].unique())
364
     #pprint(df1['sla_name'].unique())
337
     
365
     
338
     #df1['results_text'] = df1['results'].apply(con_human)
366
     #df1['results_text'] = df1['results'].apply(con_human)
339
     df1['results_text'] = df1.apply(con_human, axis=1)
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
     table = table.dropna(how='all', axis=0)
370
     table = table.dropna(how='all', axis=0)
342
     return (table,df1)
371
     return (table,df1)
343
 
372
 
367
         vr_filter = ", ".join(f"'{w}'" for w in vr_name)
396
         vr_filter = ", ".join(f"'{w}'" for w in vr_name)
368
         table = table.query(f"verifier_name in ({vr_filter})")
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
     gen_report = request.GET.get('genReport', None)
402
     gen_report = request.GET.get('genReport', None)
371
     
403
     
372
     report_link = None
404
     report_link = None

+ 2 - 2
app/network_report/settings.py

57
     'django.contrib.postgres',
57
     'django.contrib.postgres',
58
     'crispy_forms',
58
     'crispy_forms',
59
     "crispy_bootstrap5",
59
     "crispy_bootstrap5",
60
-    "django_browser_reload",
60
+    # "django_browser_reload",
61
     'widget_tweaks',
61
     'widget_tweaks',
62
     'django_bootstrap_breadcrumbs',
62
     'django_bootstrap_breadcrumbs',
63
     'django_filters',
63
     'django_filters',
73
     'django.contrib.auth.middleware.AuthenticationMiddleware',
73
     'django.contrib.auth.middleware.AuthenticationMiddleware',
74
     'django.contrib.messages.middleware.MessageMiddleware',
74
     'django.contrib.messages.middleware.MessageMiddleware',
75
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
75
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
76
-    "django_browser_reload.middleware.BrowserReloadMiddleware",
76
+    # "django_browser_reload.middleware.BrowserReloadMiddleware",
77
 ]
77
 ]
78
 
78
 
79
 ROOT_URLCONF = 'network_report.urls'
79
 ROOT_URLCONF = 'network_report.urls'

+ 1 - 1
app/network_report/urls.py

22
 urlpatterns = [
22
 urlpatterns = [
23
     path('admin/', admin.site.urls),
23
     path('admin/', admin.site.urls),
24
     path('backend/', include('backend.urls')),
24
     path('backend/', include('backend.urls')),
25
-    path("__reload__/", include("django_browser_reload.urls")),
25
+    # path("__reload__/", include("django_browser_reload.urls")),
26
     path('', RedirectView.as_view(pattern_name='backend:index', permanent=True)),
26
     path('', RedirectView.as_view(pattern_name='backend:index', permanent=True)),
27
 ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
27
 ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
28
 
28