Tum месяцев назад: 10
Родитель
Сommit
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
 from django.shortcuts import render, redirect
1
 from django.shortcuts import render, redirect
2
 from backend.mongodb import db
2
 from backend.mongodb import db
3
-from exfo.lib import Exfo, Mikrotik
3
+from exfo.lib import Exfo, Mikrotik, SLA_MAP
4
 from pprint import pprint
4
 from pprint import pprint
5
 
5
 
6
 from ttp import ttp
6
 from ttp import ttp
272
         #pprint(r)
272
         #pprint(r)
273
         try:
273
         try:
274
             r0 = r['result']
274
             r0 = r['result']
275
+            pprint(r0)
275
             if len(r0) > 0:
276
             if len(r0) > 0:
276
                 col.insert_many(r0)
277
                 col.insert_many(r0)
278
+            else:
279
+                pprint("Empty Result")
277
         except Exception as e:
280
         except Exception as e:
278
             pprint(e)
281
             pprint(e)
279
 
282
 
334
         if not d['sla_name']:
337
         if not d['sla_name']:
335
             continue
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
         if len(sla_splt) > 1:
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
             pprint(reg_cond)
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
             pprint("temp addr")
352
             pprint("temp addr")
344
             pprint(d['sla_name'])
353
             pprint(d['sla_name'])
345
-            # //pprint(temp_addr)
354
+
355
+            pprint(temp_addr)
356
+
346
             target_address = None
357
             target_address = None
347
             if temp_addr:
358
             if temp_addr:
348
                 target_address = temp_addr[0]
359
                 target_address = temp_addr[0]
360
     df0 = pd.DataFrame(data)
371
     df0 = pd.DataFrame(data)
361
     df0 = df0.explode(["header", "results"])
372
     df0 = df0.explode(["header", "results"])
362
     try:
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
     except:
375
     except:
365
         df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name",]]
376
         df1 = df0[["header", "results", "dt", "sla_name", "test_display_name", "verifier_name",]]
366
 
377
 
370
     #df1['results_text'] = df1['results'].apply(con_human)
381
     #df1['results_text'] = df1['results'].apply(con_human)
371
     df1['results_text'] = df1.apply(con_human, axis=1)
382
     df1['results_text'] = df1.apply(con_human, axis=1)
372
     try:
383
     try:
373
-        df1['network_str'] = df1['network'] + " / " + df1['interface']
384
+        df1['network_str'] = df1['network'] + " / " + df1['interface'] + " / " + df1['ts']
374
     except:
385
     except:
375
         df1['network_str'] = "N/A"
386
         df1['network_str'] = "N/A"
376
 
387
 
407
     table = table.dropna(how='all', axis=0)
418
     table = table.dropna(how='all', axis=0)
408
     table = table.dropna(how='all', axis=1)
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
     report_link = None
423
     report_link = None
413
-    if gen_report:
424
+    if is_gen_report:
414
         import time
425
         import time
415
         # ts = int(time.time())
426
         # ts = int(time.time())
416
         import pytz
427
         import pytz
422
         report_link = f'/media/{fn}'
433
         report_link = f'/media/{fn}'
423
 
434
 
424
     try:
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
     except:
442
     except:
428
         mk_ips = []
443
         mk_ips = []
429
         mk_address = []
444
         mk_address = []
436
 def mikro_dump_task():
451
 def mikro_dump_task():
437
     #look at only pppoe only ( excloude pppoe5 )
452
     #look at only pppoe only ( excloude pppoe5 )
438
     col  = db['ip_address']
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
 @shared_task
468
 @shared_task
450
 def gen_report_task():
469
 def gen_report_task():
458
     else:
477
     else:
459
         pprint(f"dump = {r.status_code}")
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
     if r.status_code == 200:
482
     if r.status_code == 200:
463
         pprint("genreport OK")
483
         pprint("genreport OK")
464
     else:
484
     else:

+ 9 - 4
app/exfo/lib.py

55
           'Accept': 'application/json'
55
           'Accept': 'application/json'
56
         }
56
         }
57
         url = self.BASE_IP + ep
57
         url = self.BASE_IP + ep
58
+        pprint("--- call remote ---")
58
         pprint(url)
59
         pprint(url)
60
+        pprint(payload)
59
         response = self.session.get(url, headers=headers, data=payload, verify=False)
61
         response = self.session.get(url, headers=headers, data=payload, verify=False)
60
         pprint(response)
62
         pprint(response)
61
         return response
63
         return response
121
         "RBI BV-110":"61.7.161.162",	
123
         "RBI BV-110":"61.7.161.162",	
122
         "NSN":"61.7.161.164",	
124
         "NSN":"61.7.161.164",	
123
         "CBI":"61.7.161.163",	
125
         "CBI":"61.7.161.163",	
124
-        "CMI":"61.7.161.171",	
126
+        "CMI":"61.7.161.171,61.7.161.172",	
125
         "HYI":"61.7.161.180",	
127
         "HYI":"61.7.161.180",	
126
         "NMA":"61.7.161.179",	
128
         "NMA":"61.7.161.179",	
127
         "CRI":"61.7.161.178",	
129
         "CRI":"61.7.161.178",	
128
         "SNI":"61.7.161.177",	
130
         "SNI":"61.7.161.177",	
129
         "SPI":"61.7.161.175",	
131
         "SPI":"61.7.161.175",	
130
         "PTY BV-110":"61.7.161.174",	
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
         "PLK":"61.7.161.169",	
134
         "PLK":"61.7.161.169",	
134
         "HYI _BV-100":"61.7.161.168",	
135
         "HYI _BV-100":"61.7.161.168",	
135
         "CMI BV-110":"61.7.161.167",	
136
         "CMI BV-110":"61.7.161.167",	
147
       'Authorization': 'Basic YWRtaW46RGlnaXRpbnNfMDE='
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
     def call_remote(self, cmd, payload={}):
155
     def call_remote(self, cmd, payload={}):
151
         url = self.BASE_URL + cmd
156
         url = self.BASE_URL + cmd
152
         pprint(url)
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
         return response.json()
159
         return response.json()
155
 
160
 
156
 
161
 

+ 2 - 2
app/templates/base.html

7
     <meta name="description" content="">
7
     <meta name="description" content="">
8
     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
8
     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
9
     <meta name="generator" content="Hugo 0.84.0">
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
     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/dashboard/">
12
     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/dashboard/">
13
 
13
 
43
   <body>
43
   <body>
44
     
44
     
45
 <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
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
   <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">
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
     <span class="navbar-toggler-icon"></span>
48
     <span class="navbar-toggler-icon"></span>
49
   </button>
49
   </button>

+ 2 - 2
app/templates/base_raw.html

7
     <meta name="description" content="">
7
     <meta name="description" content="">
8
     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
8
     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
9
     <meta name="generator" content="Hugo 0.84.0">
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
     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/dashboard/">
12
     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/dashboard/">
13
 
13
 
43
   <body>
43
   <body>
44
     
44
     
45
 <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
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
   <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">
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
     <span class="navbar-toggler-icon"></span>
48
     <span class="navbar-toggler-icon"></span>
49
   </button>
49
   </button>