178
+        test_status_result = []
179
+
180
+        for si in r['result']['tests']:
181
+            c = exfo.call_remote_api(si['test_instance_class_uri']).json()['result']
182
+            service = c['service']
183
+            target = None
184
+            if 'target' in c:
185
+                target = c['target']
186
+            test_instance_class_result.append(c)
187
+            c = exfo.call_remote_api(si['test_status_uri']).json()['result']
188
+            test_status_result.append({'sla_name':sla_name, 'test_instance_id': si['test_instance_id'],\
189
+                                    'service': service, 'target': target, \
190
+                                    'type_type_name':  si['test_type_name'],\
191
+                                    'test_instance_class_id': si['test_instance_class_id']  , 'status': c, })
192
+
193
+        t['test_instance_class_result'] = test_instance_class_result
194
+        t['test_status_result'] = test_status_result
195
+        t['created'] = datetime.utcnow()
196
+        col.insert_one(t)
197
+
198
+    # pprint(temp)
199
+    #col.insert_many(temp)
200
+    results = col.find({})
201
+    data = dumps(list(results), indent=4)
202
+    return HttpResponse(data, content_type='application/json')
203
+
204
+
205
+@shared_task
206
+def dump_api_task():
207
+    from bson.json_util import dumps
208
+    from bson.json_util import loads
209
+    col  = db['exfo_api']
210
+    # col.delete_many({})
211
+    sla = exfo.call_api("sla")
212
+    sla_json = sla.json()
213
+    temp = sla_json['result']
214
+    for t in temp:
215
+        sla_uri = t['ids']['sla_uri']
216
+        sla_name = t['ids']['sla_name']
217
+        r = exfo.call_remote_api(sla_uri).json()
218
+        t['sla_uri_result'] = r['result']
219
+        service_result = []
220
+        for si in r['result']['service_instances']:
221
+            c = exfo.call_remote_api(si['service_uri']).json()['result']
222
+            service_result.append(c)
223
+
224
+        test_instance_class_result = []
225
+        test_status_result = []
226
+
227
+        for si in r['result']['tests']:
228
+            c = exfo.call_remote_api(si['test_instance_class_uri']).json()['result']
229
+            service = c['service']
230
+            target = None
231
+            if 'target' in c:
232
+                target = c['target']
233
+            test_instance_class_result.append(c)
234
+            c = exfo.call_remote_api(si['test_status_uri']).json()['result']
235
+            test_status_result.append({'sla_name':sla_name, 'test_instance_id': si['test_instance_id'],\
236
+                                    'service': service, 'target': target, \
237
+                                    'type_type_name':  si['test_type_name'],\
238
+                                    'test_instance_class_id': si['test_instance_class_id']  , 'status': c, })
239
+
240
+        t['test_instance_class_result'] = test_instance_class_result
241
+        t['test_status_result'] = test_status_result
242
+        t['created'] = datetime.utcnow()
243
+        col.insert_one(t)
244
+
245
+    pprint("Dump API ... Finished")
246
+
247
+def print_table(request):
248
+    return render(request, 'backend/print_table.html')
249
+
250
+
157
     
251
     

+ 3 - 1
app/exfo/lib.py

1
 import requests
1
 import requests
2
 from pprint import pprint
2
 from pprint import pprint
3
 
3
 
4
+import functools
5
+
4
 class Exfo:
6
 class Exfo:
5
     BASE_URL = "https://159.192.8.11/API/REST"
7
     BASE_URL = "https://159.192.8.11/API/REST"
6
     BASE_IP = "https://159.192.8.11"
8
     BASE_IP = "https://159.192.8.11"
46
         response = self.session.get(url, headers=headers, data=payload, verify=False)
48
         response = self.session.get(url, headers=headers, data=payload, verify=False)
47
         pprint(response.json())
49
         pprint(response.json())
48
         return response
50
         return response
49
-
51
+    
50
     def call_remote_api(self, ep, payload={}):
52
     def call_remote_api(self, ep, payload={}):
51
         
53
         
52
         headers = {
54
         headers = {

+ 7 - 0
app/network_report/celery.py

1
+import os
2
+from celery import Celery
3
+
4
+os.environ.setdefault('DJANGO_SETTINGS_MODULES', 'network_report.settings')
5
+app = Celery('network_report', broker='pyamqp://guest:guest@rabbitmq3//')
6
+app.config_from_object('django.conf:settings', namespace='CELERY')
7
+app.autodiscover_tasks()

+ 12 - 1
app/network_report/settings.py

24
 environ.Env.read_env()
24
 environ.Env.read_env()
25
 # Build paths inside the project like this: BASE_DIR / 'subdir'.
25
 # Build paths inside the project like this: BASE_DIR / 'subdir'.
26
 BASE_DIR = Path(__file__).resolve().parent.parent
26
 BASE_DIR = Path(__file__).resolve().parent.parent
27
-
27
+from celery.schedules import crontab
28
 
28
 
29
 # Quick-start development settings - unsuitable for production
29
 # Quick-start development settings - unsuitable for production
30
 # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
30
 # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
192
     'tailwind-color-palette', 
192
     'tailwind-color-palette', 
193
     'paper-css'
193
     'paper-css'
194
 )
194
 )
195
+
196
+
197
+CELERY_BEAT_SCHEDULE = {
198
+    "dumpapi": {
199
+        "task": "backend.views.dump_api_task",
200
+        #"schedule": crontab(minute="*/1"),
201
+        # "schedule": crontab(minute="*/30"),
202
+        # "schedule": crontab(hour="17", minute="15"),
203
+        "schedule": crontab(hour="*/3,17-21"),
204
+    },
205
+}

+ 1 - 1
app/worker-entrypoint.sh

1
 #!/bin/bash
1
 #!/bin/bash
2
-celery -A kacee worker -B  -l info
2
+celery -A network_report worker -B  -l info
3
 #celery -A kacee beat --detach -l info
3
 #celery -A kacee beat --detach -l info

+ 24 - 24
docker-compose.prod.yml

7
     ports:
7
     ports:
8
       - "127.0.0.1:6379:6379"
8
       - "127.0.0.1:6379:6379"
9
   db:
9
   db:
10
-    image: postgres
10
+    image: postgres:15.5-alpine3.19
11
     volumes:
11
     volumes:
12
       - ./data/db:/var/lib/postgresql/data
12
       - ./data/db:/var/lib/postgresql/data
13
     ports:
13
     ports:
42
   worker:
42
   worker:
43
     restart: unless-stopped
43
     restart: unless-stopped
44
     #build: .
44
     #build: .
45
-    image: tum/web-image
45
+    image: tum/network-report-image
46
     #command: python -X dev manage.py  runserver 0.0.0.0:8000
46
     #command: python -X dev manage.py  runserver 0.0.0.0:8000
47
     entrypoint: ./worker-entrypoint.sh
47
     entrypoint: ./worker-entrypoint.sh
48
     volumes:
48
     volumes:
53
       - POSTGRES_USER=postgres
53
       - POSTGRES_USER=postgres
54
       - POSTGRES_PASSWORD=postgres
54
       - POSTGRES_PASSWORD=postgres
55
       - PYTHONMALLOC=debug
55
       - PYTHONMALLOC=debug
56
-      - DJANGO_SETTINGS_MODULE=kacee.settings
56
+      - DJANGO_SETTINGS_MODULE=network_report.settings
57
       - MODE=${MODE}
57
       - MODE=${MODE}
58
     depends_on:
58
     depends_on:
59
       - web
59
       - web
60
-  websocket:
61
-    #build: .
62
-    image: tum/network-report-image
63
-    command: nodemon authentication.py
64
-    volumes:
65
-      - ./app:/code
66
-    ports:
67
-      - "127.0.0.1:8888:8888"
68
-    environment:
69
-      - POSTGRES_NAME=postgres
70
-      - POSTGRES_USER=postgres
71
-      - POSTGRES_PASSWORD=postgres
72
-      - PYTHONMALLOC=debug
73
-      - DJANGO_SETTINGS_MODULE=kacee.settings
74
-      - MODE=${MODE}
75
-    depends_on:
76
-      - db
77
-      - redis
60
+  #websocket:
61
+    ##build: .
62
+    #image: tum/network-report-image
63
+    #command: nodemon authentication.py
64
+    #volumes:
65
+      #- ./app:/code
66
+    #ports:
67
+      #- "127.0.0.1:8888:8888"
68
+    #environment:
69
+      #- POSTGRES_NAME=postgres
70
+      #- POSTGRES_USER=postgres
71
+      #- POSTGRES_PASSWORD=postgres
72
+      #- PYTHONMALLOC=debug
73
+      #- DJANGO_SETTINGS_MODULE=kacee.settings
74
+      #- MODE=${MODE}
75
+    #depends_on:
76
+      #- db
77
+      #- redis
78
   rabbitmq:
78
   rabbitmq:
79
     image: rabbitmq:3-management-alpine
79
     image: rabbitmq:3-management-alpine
80
-    container_name: 'rabbitmq'
80
+    container_name: 'rabbitmq3'
81
     ports:
81
     ports:
82
-      - "127.0.0.1:5672:5672"
83
-      - "127.0.0.1:15672:15672"
82
+      - "5672:5672"
83
+      - "15672:15672"
84
     volumes:
84
     volumes:
85
         - ./rabbitmq/data/:/var/lib/rabbitmq/
85
         - ./rabbitmq/data/:/var/lib/rabbitmq/
86
         - ./rabbitmq/log/:/var/log/rabbitmq
86
         - ./rabbitmq/log/:/var/log/rabbitmq

+ 29 - 29
docker-compose.yml

5
     ports:
5
     ports:
6
       - "6379"
6
       - "6379"
7
   db:
7
   db:
8
-    image: postgres
8
+    image: postgres:15.5-alpine3.19
9
     volumes:
9
     volumes:
10
       - ./data/db:/var/lib/postgresql/data
10
       - ./data/db:/var/lib/postgresql/data
11
     ports:
11
     ports:
17
   mongodb:
17
   mongodb:
18
     image: mongo:6-jammy
18
     image: mongo:6-jammy
19
     ports:
19
     ports:
20
-      - '27017'
20
+      - '27017:27017'
21
     volumes:
21
     volumes:
22
       - ./mongodb:/data/db
22
       - ./mongodb:/data/db
23
   web:
23
   web:
43
       - db
43
       - db
44
       - redis
44
       - redis
45
       #- rabbitmq
45
       #- rabbitmq
46
-  #worker:
47
-    #restart: unless-stopped
48
-    ##build: .
49
-    #image: tum/network-report-image
50
-    ##command: python -X dev manage.py  runserver 0.0.0.0:8000
51
-    #entrypoint: ./worker-entrypoint.sh
52
-    #volumes:
53
-      #- ./app:/code
54
-      #- ./media:/code/media
55
-    #environment:
56
-      #- POSTGRES_NAME=postgres
57
-      #- POSTGRES_USER=postgres
58
-      #- POSTGRES_PASSWORD=postgres
59
-      #- PYTHONMALLOC=debug
60
-      #- DJANGO_SETTINGS_MODULE=kacee.settings
61
-      #- MODE=${MODE}
62
-    #depends_on:
63
-      #- web
46
+  worker:
47
+    restart: unless-stopped
48
+    #build: .
49
+    image: tum/network-report-image
50
+    #command: python -X dev manage.py  runserver 0.0.0.0:8000
51
+    entrypoint: ./worker-entrypoint.sh
52
+    volumes:
53
+      - ./app:/code
54
+      - ./media:/code/media
55
+    environment:
56
+      - POSTGRES_NAME=postgres
57
+      - POSTGRES_USER=postgres
58
+      - POSTGRES_PASSWORD=postgres
59
+      - PYTHONMALLOC=debug
60
+      - DJANGO_SETTINGS_MODULE=network_report.settings
61
+      - MODE=${MODE}
62
+    depends_on:
63
+      - web
64
   #websocket:
64
   #websocket:
65
     ##build: .
65
     ##build: .
66
     #image: tum/network-report-image
66
     #image: tum/network-report-image
79
     #depends_on:
79
     #depends_on:
80
       #- db
80
       #- db
81
       #- redis
81
       #- redis
82
-  #rabbitmq:
83
-    #image: rabbitmq:3-management-alpine
84
-    #container_name: 'rabbitmq'
85
-    #ports:
86
-      #- "127.0.0.1:5672:5672"
87
-      #- "127.0.0.1:15672:15672"
88
-    #volumes:
89
-        #- ./rabbitmq/data/:/var/lib/rabbitmq/
90
-        #- ./rabbitmq/log/:/var/log/rabbitmq
82
+  rabbitmq:
83
+    image: rabbitmq:3-management-alpine
84
+    container_name: 'rabbitmq3'
85
+    ports:
86
+      - "5672:5672"
87
+      - "15672:15672"
88
+    volumes:
89
+        - ./rabbitmq/data/:/var/lib/rabbitmq/
90
+        - ./rabbitmq/log/:/var/log/rabbitmq
91
     #networks:
91
     #networks:
92
         #- rabbitmq_go_net
92
         #- rabbitmq_go_net

File diff suppressed because it is too large
+ 5659 - 0
network.ipynb


BIN
ping_test.xlsx


+ 1 - 1
requirements.txt

38
 django-multiselectfield
38
 django-multiselectfield
39
 django_ace
39
 django_ace
40
 django-autoslug
40
 django-autoslug
41
-celery==5.2.7
41
+celery
42
 django-phonenumber-field[phonenumbers]
42
 django-phonenumber-field[phonenumbers]
43
 django-credit-cards
43
 django-credit-cards
44
 django-payments[stripe]
44
 django-payments[stripe]

BIN
table.xlsx


BIN
table1703516489.xlsx


BIN
table2.xlsx


BIN
table3.xlsx


BIN
test.xlsx


BIN
~$table1703516489.xlsx


BIN
~$table3.xlsx


tum/RH2 - Gogs: Simplico Git Service

1 Commitit (master)

Tekijä SHA1 Viesti Päivämäärä
  Tum 1b88cea994 first commit 1 vuosi sitten