Skip to content

Commit 2a1824a

Browse files
CH-67 Add background initialization for auth and events to main.py template
1 parent 2f7b474 commit 2a1824a

3 files changed

Lines changed: 50 additions & 3 deletions

File tree

  • application-templates/django-app/api/templates
  • infrastructure/common-images/cloudharness-django/libraries/cloudharness-django/cloudharness_django/services

application-templates/django-app/api/templates/main.jinja2

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@ async def add_process_time_header(request: Request, call_next):
6666

6767
if os.environ.get('KUBERNETES_SERVICE_HOST', None):
6868
# init the auth service when running in/for k8s
69-
from cloudharness_django.services import init_services, get_auth_service
70-
init_services()
69+
from cloudharness_django.services import init_services_in_background, get_auth_service
70+
init_services_in_background()
71+
7172
# start the kafka event listener when running in/for k8s
72-
import cloudharness_django.services.events
73+
from cloudharness_django.services.events import init_listener_in_background
74+
init_listener_in_background()
7375

7476
async def has_access():
7577
"""

infrastructure/common-images/cloudharness-django/libraries/cloudharness-django/cloudharness_django/services/__init__.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,28 @@ def init_services(
4343
admin_role=admin_role)
4444
_user_service = UserService(_auth_service)
4545
return _auth_service
46+
47+
48+
def init_services_in_background(
49+
client_name: str = settings.KC_CLIENT_NAME,
50+
client_roles: List[str] = settings.KC_ALL_ROLES,
51+
privileged_roles: List[str] = settings.KC_PRIVILEGED_ROLES,
52+
admin_role: str = settings.KC_ADMIN_ROLE,
53+
default_user_role: str = settings.KC_DEFAULT_USER_ROLE
54+
):
55+
import threading
56+
import time
57+
from cloudharness import log
58+
59+
def background_operation():
60+
services_initialized = False
61+
62+
while not services_initialized:
63+
try:
64+
init_services(client_name, client_roles, privileged_roles, admin_role, default_user_role)
65+
services_initialized = True
66+
except:
67+
log.exception("Error initializing services. Retrying in 5 seconds...")
68+
time.sleep(5)
69+
70+
threading.Thread(target=background_operation).start()

infrastructure/common-images/cloudharness-django/libraries/cloudharness-django/cloudharness_django/services/events.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,23 @@ def init_listener():
9696
_message_service_singleton = KeycloakMessageService(settings.PROJECT_NAME).setup_event_service()
9797

9898
_message_service_singleton.setup_event_service()
99+
100+
101+
def init_listener_in_background():
102+
import threading
103+
import time
104+
from cloudharness import log
105+
106+
def background_operation():
107+
listener_initialized = False
108+
109+
while not listener_initialized:
110+
try:
111+
init_listener()
112+
log.info('User sync events listener started')
113+
listener_initialized = True
114+
except:
115+
log.exception('Error initializing event queue. Retrying in 5 seconds...')
116+
time.sleep(5)
117+
118+
threading.Thread(target=background_operation).start()

0 commit comments

Comments
 (0)