Tum преди 10 месеца
родител
ревизия
3213aa5229
променени са 4 файла, в които са добавени 54 реда и са изтрити 29 реда
  1. 41 21
      app/backend/views.py
  2. 9 4
      app/exfo/lib.py
  3. 2 2
      app/templates/base.html
  4. 2 2
      app/templates/base_raw.html

+ 41 - 21
app/backend/views.py

@@ -1,6 +1,6 @@
1 1
 from django.shortcuts import render, redirect
2 2
 from backend.mongodb import db
3
-from exfo.lib import Exfo, Mikrotik
3
+from exfo.lib import Exfo, Mikrotik, SLA_MAP
4 4
 from pprint import pprint
5 5
 
6 6
 from ttp import ttp
@@ -272,8 +272,11 @@ def dump_fixed_results(request):
272 272
         #pprint(r)
273 273
         try:
274 274
             r0 = r['result']
275
+            pprint(r0)
275 276
             if len(r0) > 0:
276 277
                 col.insert_many(r0)
278
+            else:
279
+                pprint("Empty Result")
277 280
         except Exception as e:
278 281
             pprint(e)
279 282
 
@@ -334,15 +337,23 @@ def gen_report_notebook():
334 337
         if not d['sla_name']:
335 338
             continue
336 339
 
337
-        sla_splt = d['sla_name'].split('-')
340
+        # sla_splt = d['sla_name'].split('-')
341
+        sla_splt = d['verifier_name'].split('_')
338 342
         if len(sla_splt) > 1:
339
-            reg_cond = f'(?=^pppoe-out)(?=.*{sla_splt[0]})(?=.*{sla_splt[-1]})'
343
+            # reg_cond = f'(?=^pppoe-out)(?=.*{sla_splt[0]})(?=.*{sla_splt[-1]})'
344
+            # reg_cond = f'(?=^pppoe-out)(?=.*{sla_splt[-1]})'
345
+            reg_cond = f'(?=.*pppoe-out)(?=.*{sla_splt[-1]})'
340 346
 
341 347
             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))
348
+            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))
349
+            # temp_addr = list(c2.find({'ts': {'$lte': utc, '$gte': yest }, 'interface': {'$regex': reg_cond, '$options': 'i' }, 'invalid': 'false'}).sort("ts", -1))
350
+            # temp_addr = list(c2.find({'interface': {'$regex': reg_cond, '$options': 'i' }, 'invalid': 'false'}).sort("ts", -1))
351
+            pprint("-------")
343 352
             pprint("temp addr")
344 353
             pprint(d['sla_name'])
345
-            # //pprint(temp_addr)
354
+
355
+            pprint(temp_addr)
356
+
346 357
             target_address = None
347 358
             if temp_addr:
348 359
                 target_address = temp_addr[0]
@@ -360,7 +371,7 @@ def gen_report_notebook():
360 371
     df0 = pd.DataFrame(data)
361 372
     df0 = df0.explode(["header", "results"])
362 373
     try:
363
-        df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name", "network", "address", "interface"]]
374
+        df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name", "network", "address", "interface", "ts"]]
364 375
     except:
365 376
         df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name",]]
366 377
 
@@ -370,7 +381,7 @@ def gen_report_notebook():
370 381
     #df1['results_text'] = df1['results'].apply(con_human)
371 382
     df1['results_text'] = df1.apply(con_human, axis=1)
372 383
     try:
373
-        df1['network_str'] = df1['network'] + " / " + df1['interface']
384
+        df1['network_str'] = df1['network'] + " / " + df1['interface'] + " / " + df1['ts']
374 385
     except:
375 386
         df1['network_str'] = "N/A"
376 387
 
@@ -407,10 +418,10 @@ def gen_report(request):
407 418
     table = table.dropna(how='all', axis=0)
408 419
     table = table.dropna(how='all', axis=1)
409 420
 
410
-    gen_report = request.GET.get('genReport', None)
421
+    is_gen_report = request.GET.get('genReport', None)
411 422
 
412 423
     report_link = None
413
-    if gen_report:
424
+    if is_gen_report:
414 425
         import time
415 426
         # ts = int(time.time())
416 427
         import pytz
@@ -422,8 +433,12 @@ def gen_report(request):
422 433
         report_link = f'/media/{fn}'
423 434
 
424 435
     try:
425
-        mk_ips = mkt.call_remote("ip/route")
426
-        mk_address = mkt.call_remote("ip/address")
436
+        mk_ips = []
437
+        mk_address = []
438
+        for v in SLA_MAP.values():
439
+            mkt = Mikrotik(v)
440
+            mk_ips.append(mkt.call_remote("ip/route"))
441
+            mk_address.append(mkt.call_remote("ip/address"))
427 442
     except:
428 443
         mk_ips = []
429 444
         mk_address = []
@@ -436,15 +451,19 @@ def gen_report(request):
436 451
 def mikro_dump_task():
437 452
     #look at only pppoe only ( excloude pppoe5 )
438 453
     col  = db['ip_address']
439
-    try:
440
-        mk_address = mkt.call_remote("ip/address")
441
-        for i in mk_address:
442
-            temp = {'ts': datetime.utcnow()}
443
-            temp = temp | i
444
-            col.insert_one(temp)
445
-        pprint("dump ip complete")
446
-    except Exception as e:
447
-        pprint(f"error = {e}")
454
+    pprint(SLA_MAP.values())
455
+    for v in SLA_MAP.values():
456
+        for v0 in v.split(','):
457
+            mkt = Mikrotik(v0)
458
+            try:
459
+                mk_address = mkt.call_remote("ip/address")
460
+                for i in mk_address:
461
+                    temp = {'ts': datetime.utcnow()}
462
+                    temp = temp | i
463
+                    col.insert_one(temp)
464
+                pprint("dump ip complete")
465
+            except Exception as e:
466
+                pprint(e)
448 467
 
449 468
 @shared_task
450 469
 def gen_report_task():
@@ -458,7 +477,8 @@ def gen_report_task():
458 477
     else:
459 478
         pprint(f"dump = {r.status_code}")
460 479
 
461
-    r = requests.get(f'http://web:8000/backend/gen_report/?sla_name=BNG-144-VLAN20-Public&sla_name=BNG-144-VLAN10-Private&sla_name=BRAS-88-VLAN20-Public&sla_name=BRAS-88-VLAN10-Private&genReport=Gen+Report', timeout=None)
480
+    # r = requests.get(f'http://web:8000/backend/gen_report/?sla_name=BNG-144-VLAN20-Public&sla_name=BNG-144-VLAN10-Private&sla_name=BRAS-88-VLAN20-Public&sla_name=BRAS-88-VLAN10-Private&genReport=Gen+Report', timeout=None)
481
+    r = requests.get(f'http://web:8000/backend/gen_report/?genReport=Gen+Report&sla_name=BNG-144-VLAN20-Public&sla_name=BNG-144-VLAN10-Private&sla_name=BRAS-88-VLAN20-Public&sla_name=BRAS-88-VLAN10-Private', timeout=None)
462 482
     if r.status_code == 200:
463 483
         pprint("genreport OK")
464 484
     else:

+ 9 - 4
app/exfo/lib.py

@@ -55,7 +55,9 @@ class Exfo:
55 55
           'Accept': 'application/json'
56 56
         }
57 57
         url = self.BASE_IP + ep
58
+        pprint("--- call remote ---")
58 59
         pprint(url)
60
+        pprint(payload)
59 61
         response = self.session.get(url, headers=headers, data=payload, verify=False)
60 62
         pprint(response)
61 63
         return response
@@ -121,15 +123,14 @@ SLA_MAP = {
121 123
         "RBI BV-110":"61.7.161.162",	
122 124
         "NSN":"61.7.161.164",	
123 125
         "CBI":"61.7.161.163",	
124
-        "CMI":"61.7.161.171",	
126
+        "CMI":"61.7.161.171,61.7.161.172",	
125 127
         "HYI":"61.7.161.180",	
126 128
         "NMA":"61.7.161.179",	
127 129
         "CRI":"61.7.161.178",	
128 130
         "SNI":"61.7.161.177",	
129 131
         "SPI":"61.7.161.175",	
130 132
         "PTY BV-110":"61.7.161.174",	
131
-        "PTY":"61.7.161.159",	
132
-        "PTY":"61.7.161.161",	
133
+        "PTY":"61.7.161.159,61.7.161.161",	
133 134
         "PLK":"61.7.161.169",	
134 135
         "HYI _BV-100":"61.7.161.168",	
135 136
         "CMI BV-110":"61.7.161.167",	
@@ -147,10 +148,14 @@ class Mikrotik:
147 148
       'Authorization': 'Basic YWRtaW46RGlnaXRpbnNfMDE='
148 149
     }
149 150
 
151
+    def __init__(self, ip=None):
152
+        if ip:
153
+            self.BASE_URL = f"https://{ip}/rest/"
154
+
150 155
     def call_remote(self, cmd, payload={}):
151 156
         url = self.BASE_URL + cmd
152 157
         pprint(url)
153
-        response = requests.get(url, auth=self.basic,  data=payload, verify=False)
158
+        response = requests.get(url, auth=self.basic,  data=payload, verify=False, timeout=3)
154 159
         return response.json()
155 160
 
156 161
 

+ 2 - 2
app/templates/base.html

@@ -7,7 +7,7 @@
7 7
     <meta name="description" content="">
8 8
     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
9 9
     <meta name="generator" content="Hugo 0.84.0">
10
-    <title>Dashboard Template · Bootstrap v5.0</title>
10
+    <title>Network Report System</title>
11 11
 
12 12
     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/dashboard/">
13 13
 
@@ -43,7 +43,7 @@
43 43
   <body>
44 44
     
45 45
 <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
46
-  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3" href="#">Company name</a>
46
+  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3" href="#">Network Report System</a>
47 47
   <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
48 48
     <span class="navbar-toggler-icon"></span>
49 49
   </button>

+ 2 - 2
app/templates/base_raw.html

@@ -7,7 +7,7 @@
7 7
     <meta name="description" content="">
8 8
     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
9 9
     <meta name="generator" content="Hugo 0.84.0">
10
-    <title>Dashboard Template · Bootstrap v5.0</title>
10
+    <title>Network Report System</title>
11 11
 
12 12
     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/dashboard/">
13 13
 
@@ -43,7 +43,7 @@
43 43
   <body>
44 44
     
45 45
 <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
46
-  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3" href="#">Company name</a>
46
+  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3" href="#">Network Report System</a>
47 47
   <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
48 48
     <span class="navbar-toggler-icon"></span>
49 49
   </button>