From bc9e331c68e98c0b6bcc38cd69642e12402f0011 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Wed, 9 Sep 2026 14:46:02 +0100 Subject: [PATCH 01/19] set always off if the replica was already 0 --- django_code/apps/cloudmanager/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index a13dc9d..14f8698 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -17,8 +17,13 @@ def import_deployment(): Schedule_Week_Always_off,Schedule_Week_Always_on = generate_default_week_schedule() for deployment in deployment_list: + #if the replicas is originally 0 , it means it is disabled so put the schedule as always off + if deployment[2] == 0: + schedule_object = Schedule_Day_Always_off + else: + schedule_object = Schedule_Day_Always_on if deployment[0]!="kube-system": - Deployment_Data.objects.get_or_create(namespace=deployment[0],name=deployment[1],defaults={"replicas":deployment[2],"actual_replica":deployment[2],"schedule_day":Schedule_Day_Always_on,"schedule_week":Schedule_Week_Always_on}) + Deployment_Data.objects.get_or_create(namespace=deployment[0],name=deployment[1],defaults={"replicas":deployment[2],"actual_replica":deployment[2],"schedule_day":schedule_object,"schedule_week":Schedule_Week_Always_on}) def generate_default_day_schedule(): -- 2.54.0 From a00baa490fe7602849ce4174dee9e942d1bd7623 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Wed, 9 Sep 2026 15:18:00 +0100 Subject: [PATCH 02/19] try django-q --- django_code/apps/website_redirection/apps.py | 2 +- django_code/core/settings.py | 9 +++++++++ requirements.txt | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/django_code/apps/website_redirection/apps.py b/django_code/apps/website_redirection/apps.py index e11a364..db0bdd2 100644 --- a/django_code/apps/website_redirection/apps.py +++ b/django_code/apps/website_redirection/apps.py @@ -1,4 +1,4 @@ -import redis +#import redis from django.http import HttpResponse from django.http import HttpResponseRedirect from django.shortcuts import render diff --git a/django_code/core/settings.py b/django_code/core/settings.py index a242416..b392e37 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -53,6 +53,7 @@ INSTALLED_APPS = [ 'apps.streaming.apps.StreamingConfig', 'import_export', 'djangoql', + 'django_q', ] MIDDLEWARE = [ @@ -251,3 +252,11 @@ PROXIES = { "http" : PROXY_URL, "https" : PROXY_URL } +Q_CLUSTER = { + "name": "django_kube", + "timeout": 60, # kill a task after 60s + "retry": 120, # must be > timeout, leave headroom + "max_attempts": 3, # otherwise a poison task retries forever + "ack_failures": True, # don't requeue tasks that raised + # ... your broker settings +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 50bc442..d2571b5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ django psycopg2 -#xrequests kubernetes ruamel.yaml pyyaml @@ -8,7 +7,7 @@ django-bootstrap-v5 jinja2 watchdog celery -redis +#redis lxml requests django-hosts @@ -17,3 +16,4 @@ bitwarden_sdk xmltodict whitenoise djangoql +django-q2 -- 2.54.0 From 1012ea31adca748b231b9a3539ca3dc4e7975238 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Wed, 9 Sep 2026 17:09:15 +0100 Subject: [PATCH 03/19] testing django_q2 --- django_code/core/settings.py | 13 +++++++------ requirements.txt | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/django_code/core/settings.py b/django_code/core/settings.py index b392e37..c8bfcfd 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -253,10 +253,11 @@ PROXIES = { "https" : PROXY_URL } Q_CLUSTER = { - "name": "django_kube", - "timeout": 60, # kill a task after 60s - "retry": 120, # must be > timeout, leave headroom - "max_attempts": 3, # otherwise a poison task retries forever - "ack_failures": True, # don't requeue tasks that raised - # ... your broker settings + 'name': 'DjangORM', + 'workers': 4, + 'timeout': 90, + 'retry': 120, + 'queue_limit': 50, + 'bulk': 10, + 'orm': 'default' } \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index d2571b5..5bc8206 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ django-bootstrap-v5 jinja2 watchdog celery -#redis +redis lxml requests django-hosts -- 2.54.0 From b540c7b7e8c8b5db38518ffc089cccf6c3f3cd1c Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Wed, 9 Sep 2026 20:59:18 +0100 Subject: [PATCH 04/19] add extra button admin --- django_code/apps/cloudmanager/admin.py | 62 ++++++++++++-------- django_code/apps/podcast_aggregator/admin.py | 2 +- django_code/core/settings.py | 1 + 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/django_code/apps/cloudmanager/admin.py b/django_code/apps/cloudmanager/admin.py index bb6b80e..253caf2 100644 --- a/django_code/apps/cloudmanager/admin.py +++ b/django_code/apps/cloudmanager/admin.py @@ -1,8 +1,10 @@ from django.contrib import admin,messages from django.utils.translation import ngettext from .models import Deployment_Data,Schedule_Day_Data,Schedule_Week_Data,Namespace_Data -from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX +from .utils import import_namespace,import_deployment,generate_default_day_schedule,generate_default_week_schedule,Check_server_supposed_XXX,retrieve_and_apply from apps.kubernetes_connection.utils import scale_up,scale_down +from admin_extra_buttons.api import ExtraButtonsMixin, button + DB = 'cloudmanager_db' @@ -49,21 +51,6 @@ def Check_server_supposed_true(modeladmin, request, queryset): servers_supposed_false = Check_server_supposed_XXX(True) for server in servers_supposed_false: messages.add_message(request, messages.INFO, server) - -@admin.action(description="create default schedule") -def generate_default_day_schedule_admin(modeladmin, request, queryset): - generate_default_day_schedule() - generate_default_week_schedule() - - -@admin.action(description="import namespace") -def import_namespace_admin(modeladmin, request, queryset): - import_namespace() - -@admin.action(description="import deployment") -def import_deployment_admin(modeladmin, request, queryset): - import_deployment() - class ActiveAtHourFilter(admin.SimpleListFilter): @@ -98,27 +85,52 @@ class MultiDBModelAdmin(admin.ModelAdmin): @admin.register(Deployment_Data) -class DeploymentDataAdmin(MultiDBModelAdmin): +class DeploymentDataAdmin(ExtraButtonsMixin, MultiDBModelAdmin): list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas') list_filter = (ActiveAtHourFilter,) - actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy,import_deployment_admin,generate_default_day_schedule_admin] - + actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy] + @button() + def retrieve_and_apply(self, request): + # your business logic here + retrieve_and_apply() + self.message_user(request, 'Operation started') + + @button() + def import_deployment(self, request): + # your business logic here + import_deployment() + self.message_user(request, 'Deployments imported') @admin.register(Schedule_Day_Data) -class ScheduleDayAdmin(MultiDBModelAdmin): +class ScheduleDayAdmin(ExtraButtonsMixin,MultiDBModelAdmin): list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)] - actions = [import_deployment_admin,generate_default_day_schedule_admin] + @button() + def generate_default_day_schedule_admin(self, request): + generate_default_day_schedule() + generate_default_week_schedule() + self.message_user(request, 'Created default schedules') @admin.register(Schedule_Week_Data) -class ScheduleWeekAdmin(MultiDBModelAdmin): +class ScheduleWeekAdmin(ExtraButtonsMixin,MultiDBModelAdmin): list_display = ( 'name_schedule', 'state_Monday', 'state_Tuesday', 'state_Wednesday', 'state_Thursday', 'state_Friday', 'state_Saturday', 'state_Sunday', ) - actions = [import_deployment_admin,generate_default_day_schedule_admin] + @button() + def generate_default_day_schedule_admin(self, request): + generate_default_day_schedule() + generate_default_week_schedule() + self.message_user(request, 'Created default schedules') + @admin.register(Namespace_Data) -class NamespaceAdmin(MultiDBModelAdmin): +class NamespaceAdmin(ExtraButtonsMixin, MultiDBModelAdmin): list_display = ('namespace',) - actions = [import_namespace_admin] \ No newline at end of file + + + @button() + def import_namespace(self, request): + # your business logic here + import_namespace() + self.message_user(request, 'Namespaces imported') diff --git a/django_code/apps/podcast_aggregator/admin.py b/django_code/apps/podcast_aggregator/admin.py index ecbf68e..932142f 100644 --- a/django_code/apps/podcast_aggregator/admin.py +++ b/django_code/apps/podcast_aggregator/admin.py @@ -10,4 +10,4 @@ class JobAdmin(ImportExportModelAdmin): list_display = ('podcast_name','clickable_links','enabled') def clickable_links(self, obj): - return format_html('{}', obj.podcast_url,obj.podcast_url) \ No newline at end of file + return format_html('{}', obj.podcast_url,obj.podcast_url) diff --git a/django_code/core/settings.py b/django_code/core/settings.py index c8bfcfd..a31ec4c 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -54,6 +54,7 @@ INSTALLED_APPS = [ 'import_export', 'djangoql', 'django_q', + 'admin_extra_buttons', ] MIDDLEWARE = [ -- 2.54.0 From 0f49484a431bd5964585e4439232e9e0cff00989 Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Wed, 9 Sep 2026 20:59:44 +0100 Subject: [PATCH 05/19] add extra button admin --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 5bc8206..e8cc902 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,3 +17,4 @@ xmltodict whitenoise djangoql django-q2 +django-admin-extra-buttons -- 2.54.0 From dbeaf4c58c37a901b16bd02c3cc90eeead4ba477 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Thu, 10 Sep 2026 10:34:39 +0100 Subject: [PATCH 06/19] remove the dashboard part of cloudmanager --- django_code/apps/cloudmanager/urls.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 315940e..5c2753a 100644 --- a/django_code/apps/cloudmanager/urls.py +++ b/django_code/apps/cloudmanager/urls.py @@ -29,11 +29,11 @@ urlpatterns = [ #path('/main/', db_interaction.main), ################### onenote ################### - path('dashboard/', dashboardapp.hello), - path('view/about', dashboardview.about), - path('view/home', dashboardview.home), - path('view/success', dashboardview.success), - path('scale_up//', dashboardview.scale_up), - path('scale_down//', dashboardview.scale_down), + #path('dashboard/', dashboardapp.hello), + #path('view/about', dashboardview.about), + #path('view/home', dashboardview.home), + #path('view/success', dashboardview.success), + #path('scale_up//', dashboardview.scale_up), + #path('scale_down//', dashboardview.scale_down), ] -- 2.54.0 From 3ff4dd1fae169d89c0c10eeefa0cc0f7effbf145 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Thu, 10 Sep 2026 10:41:29 +0100 Subject: [PATCH 07/19] clean cloudmanager --- django_code/apps/cloudmanager/apps.py | 31 ------------------- .../apps/cloudmanager/db_interaction.py | 4 --- django_code/apps/cloudmanager/views.py | 21 +++++++++++++ 3 files changed, 21 insertions(+), 35 deletions(-) diff --git a/django_code/apps/cloudmanager/apps.py b/django_code/apps/cloudmanager/apps.py index 3256025..49bf34c 100644 --- a/django_code/apps/cloudmanager/apps.py +++ b/django_code/apps/cloudmanager/apps.py @@ -1,37 +1,6 @@ from django.apps import AppConfig -from django.http import HttpResponse -from django.http import HttpResponseRedirect -from django.shortcuts import render -import os -#import psycopg2 -from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour - class CloudmanagerConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'apps.cloudmanager' label = 'cloudmanager' - -def coucou(request): - return HttpResponse('

Hello cmm!

') - -def hello(request): - list_schedule = ['schedule1','schedule2'] - list_servers_up = [['wiki', 'wikijs', 2], ['book', 'bookstack-db', 1]] - return render(request, 'cloudmanager/index.html', {'list_schedule':list_schedule,'list_servers_up':list_servers_up}) - -def redirect(request): - db_host = os.environ.get('DB_HOST') - db_port = os.environ.get('DB_PORT') - db_user = os.environ.get('DB_USERNAME') - db_password = os.environ.get('DB_PASSWORD') - db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE')) - - generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name) - ##operation: - ## Server(s) supposed to be UP - - list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday()) - print(list_servers_up) - return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up}) - diff --git a/django_code/apps/cloudmanager/db_interaction.py b/django_code/apps/cloudmanager/db_interaction.py index 309f9b8..1dc7ccf 100644 --- a/django_code/apps/cloudmanager/db_interaction.py +++ b/django_code/apps/cloudmanager/db_interaction.py @@ -153,10 +153,6 @@ def main(request): #print(Is_the_server_already_wanted_state(112, "stopped")) return HttpResponse('

CMM executed!

') - -if __name__ == "__main__": - main() - """ TO DO: diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index 37c8efe..e0a9c45 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -2,6 +2,7 @@ from django.http import HttpResponse # IMPORT AT THE TOP HERE: This is completely safe! from apps.cloudmanager.models import Deployment_Data,Schedule_Week_Data +from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour def coucou(request): # 1. Prepare the data inside the function @@ -23,3 +24,23 @@ def display(request): print(data[0].namespace) return HttpResponse(data) +def hello(request): + list_schedule = ['schedule1','schedule2'] + list_servers_up = [['wiki', 'wikijs', 2], ['book', 'bookstack-db', 1]] + return render(request, 'cloudmanager/index.html', {'list_schedule':list_schedule,'list_servers_up':list_servers_up}) + +def redirect(request): + db_host = os.environ.get('DB_HOST') + db_port = os.environ.get('DB_PORT') + db_user = os.environ.get('DB_USERNAME') + db_password = os.environ.get('DB_PASSWORD') + db_name = os.environ.get('CUSTOM_DB_DATABASE',os.environ.get('DB_DATABASE')) + + generated_db = DB_generation(db_host, db_port, db_user, db_password,db_name) + ##operation: + ## Server(s) supposed to be UP + + list_servers_up = Check_server_supposed_XXX(generated_db, "up", Give_current_hour(),Give_current_weekday()) + print(list_servers_up) + return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up}) + -- 2.54.0 From 3c1960f015591ecafe566eca26024470f37ad40c Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Thu, 10 Sep 2026 10:45:45 +0100 Subject: [PATCH 08/19] clean cloudmanager --- django_code/apps/cloudmanager/urls.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 5c2753a..298d5f2 100644 --- a/django_code/apps/cloudmanager/urls.py +++ b/django_code/apps/cloudmanager/urls.py @@ -16,14 +16,13 @@ Including another URLconf """ from django.urls import path from apps.cloudmanager import apps as cloudmanager_apps -from apps.cloudmanager import views as cloudmanager_views +from apps.cloudmanager.views import coucou,display,hello urlpatterns = [ ################### cloudmanager ################### - path('', cloudmanager_apps.redirect), - path('hello', cloudmanager_apps.hello, name='hello'), - path('coucou', cloudmanager_views.coucou, name='coucou'), - path('display', cloudmanager_views.display, name='display'), + path('', hello, name='hello'), + path('coucou', coucou, name='coucou'), + path('display', display, name='display'), #path('/run-action/', cloudmanager_views.trigger_my_action, name='run_my_action_url'), #path('change-schedule/', cloudmanager_views.change_schedule, name='change_schedule'), #path('/main/', db_interaction.main), -- 2.54.0 From eab0ddd69759b14fc3b58984db1888b399803065 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Thu, 10 Sep 2026 11:05:40 +0100 Subject: [PATCH 09/19] fix shit --- django_code/apps/cloudmanager/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index e0a9c45..0136dae 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -1,4 +1,5 @@ from django.http import HttpResponse +from django.shortcuts import render # IMPORT AT THE TOP HERE: This is completely safe! from apps.cloudmanager.models import Deployment_Data,Schedule_Week_Data -- 2.54.0 From 314a6f1bed731895e5a9c7fb254cfc8cc59adbf5 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Thu, 10 Sep 2026 13:21:33 +0100 Subject: [PATCH 10/19] trying to avoid sidecontainer --- django_code/core/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/django_code/core/settings.py b/django_code/core/settings.py index a31ec4c..e6df325 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -260,5 +260,6 @@ Q_CLUSTER = { 'retry': 120, 'queue_limit': 50, 'bulk': 10, - 'orm': 'default' + 'orm': 'default', + "sync": True } \ No newline at end of file -- 2.54.0 From 90156a4733fccbb93c97965463361a6e8ee5f97c Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 21:31:10 +0100 Subject: [PATCH 11/19] enable import namespace from web --- django_code/apps/cloudmanager/urls.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 298d5f2..267610a 100644 --- a/django_code/apps/cloudmanager/urls.py +++ b/django_code/apps/cloudmanager/urls.py @@ -17,12 +17,15 @@ Including another URLconf from django.urls import path from apps.cloudmanager import apps as cloudmanager_apps from apps.cloudmanager.views import coucou,display,hello +from .utils import import_namespace urlpatterns = [ ################### cloudmanager ################### path('', hello, name='hello'), path('coucou', coucou, name='coucou'), path('display', display, name='display'), + path('import_namespace', import_namespace, name='import_namespace'), + #path('/run-action/', cloudmanager_views.trigger_my_action, name='run_my_action_url'), #path('change-schedule/', cloudmanager_views.change_schedule, name='change_schedule'), #path('/main/', db_interaction.main), -- 2.54.0 From cc3394d5ebaa85174942f97ae046b2e403f63b3d Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 21:36:02 +0100 Subject: [PATCH 12/19] change the way it work to fix import_namespace() takes 0 positional arguments but 1 was given --- django_code/apps/cloudmanager/urls.py | 19 ++++--------------- django_code/apps/cloudmanager/views.py | 8 ++++++-- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 267610a..648b0c5 100644 --- a/django_code/apps/cloudmanager/urls.py +++ b/django_code/apps/cloudmanager/urls.py @@ -15,27 +15,16 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.urls import path -from apps.cloudmanager import apps as cloudmanager_apps -from apps.cloudmanager.views import coucou,display,hello -from .utils import import_namespace + +from .views import coucou,display,hello,import_namespace_view + urlpatterns = [ ################### cloudmanager ################### path('', hello, name='hello'), path('coucou', coucou, name='coucou'), path('display', display, name='display'), - path('import_namespace', import_namespace, name='import_namespace'), - - #path('/run-action/', cloudmanager_views.trigger_my_action, name='run_my_action_url'), - #path('change-schedule/', cloudmanager_views.change_schedule, name='change_schedule'), - #path('/main/', db_interaction.main), + path('import_namespace', import_namespace_view, name='import_namespace'), - ################### onenote ################### - #path('dashboard/', dashboardapp.hello), - #path('view/about', dashboardview.about), - #path('view/home', dashboardview.home), - #path('view/success', dashboardview.success), - #path('scale_up//', dashboardview.scale_up), - #path('scale_down//', dashboardview.scale_down), ] diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index 0136dae..ab45a01 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -2,8 +2,9 @@ from django.http import HttpResponse from django.shortcuts import render # IMPORT AT THE TOP HERE: This is completely safe! -from apps.cloudmanager.models import Deployment_Data,Schedule_Week_Data -from apps.cloudmanager.db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour +from .models import Deployment_Data,Schedule_Week_Data +from .db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour +from .utils import import_namespace def coucou(request): # 1. Prepare the data inside the function @@ -30,6 +31,9 @@ def hello(request): list_servers_up = [['wiki', 'wikijs', 2], ['book', 'bookstack-db', 1]] return render(request, 'cloudmanager/index.html', {'list_schedule':list_schedule,'list_servers_up':list_servers_up}) +def import_namespace_view(request): + import_namespace() + def redirect(request): db_host = os.environ.get('DB_HOST') db_port = os.environ.get('DB_PORT') -- 2.54.0 From e9bf6ba7b5afb6c64071fe13175ec0448ce20564 Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 21:38:00 +0100 Subject: [PATCH 13/19] The view apps.cloudmanager.views.import_namespace_view didn't return an HttpResponse object. It returned None instead. --- django_code/apps/cloudmanager/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index ab45a01..7d1bc4c 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -33,7 +33,9 @@ def hello(request): def import_namespace_view(request): import_namespace() - + return HttpResponse('

Namespace imported!

') + + def redirect(request): db_host = os.environ.get('DB_HOST') db_port = os.environ.get('DB_PORT') -- 2.54.0 From 3b28145d0af433fe1d5b778361a78a59151db41f Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 22:22:10 +0100 Subject: [PATCH 14/19] add the view --- django_code/apps/cloudmanager/urls.py | 4 ++-- django_code/apps/cloudmanager/utils.py | 18 ++++++++++++++++-- django_code/apps/cloudmanager/views.py | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 648b0c5..2b05d99 100644 --- a/django_code/apps/cloudmanager/urls.py +++ b/django_code/apps/cloudmanager/urls.py @@ -16,7 +16,7 @@ Including another URLconf """ from django.urls import path -from .views import coucou,display,hello,import_namespace_view +from .views import coucou,display,hello,import_namespace_view,retrieve_and_apply_view urlpatterns = [ @@ -25,6 +25,6 @@ urlpatterns = [ path('coucou', coucou, name='coucou'), path('display', display, name='display'), path('import_namespace', import_namespace_view, name='import_namespace'), - + path('retrieve_and_apply_view', retrieve_and_apply_view, name='retrieve_and_apply_view'), ] diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index 14f8698..a9d85c4 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -97,6 +97,10 @@ def Check_server_supposed_XXX(expected_status,verbose=False): def retrieve_and_apply(verbose=False): + + output =+ Give_current_hour() + output += "\n" + #Get current replica to compare with the replicas created at the start get_current_replicas() @@ -110,7 +114,11 @@ def retrieve_and_apply(verbose=False): if server[3].actual_replica == server[2]: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP") else: - print("Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2])) + echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) + output += echo + output =+ "\n" + print(echo) + scale_up(namespace_name=server[1],deploy_name=server[0],replicas=server[2]) print("------------------------------------------") @@ -122,5 +130,11 @@ def retrieve_and_apply(verbose=False): if server[3].actual_replica == 0: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already DOWN") else: - print("Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2])) + + echo = "Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) + output += echo + output =+ "\n" + print(echo) scale_down(namespace_name=server[1],deploy_name=server[0]) + + return output \ No newline at end of file diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index 7d1bc4c..484e67b 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -4,7 +4,7 @@ from django.shortcuts import render # IMPORT AT THE TOP HERE: This is completely safe! from .models import Deployment_Data,Schedule_Week_Data from .db_interaction import DB_generation,Check_server_supposed_XXX,Give_current_weekday,Give_current_hour -from .utils import import_namespace +from .utils import import_namespace,retrieve_and_apply def coucou(request): # 1. Prepare the data inside the function @@ -36,6 +36,10 @@ def import_namespace_view(request): return HttpResponse('

Namespace imported!

') +def retrieve_and_apply_view(request): + output = retrieve_and_apply() + return HttpResponse('

'+output+'

') + def redirect(request): db_host = os.environ.get('DB_HOST') db_port = os.environ.get('DB_PORT') -- 2.54.0 From fa804dbed1e6b2a6197d57d8bd7166f343f2abc9 Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 22:24:12 +0100 Subject: [PATCH 15/19] add the view --- django_code/apps/cloudmanager/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index a9d85c4..b1bdaaa 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -97,7 +97,7 @@ def Check_server_supposed_XXX(expected_status,verbose=False): def retrieve_and_apply(verbose=False): - + output = "" output =+ Give_current_hour() output += "\n" -- 2.54.0 From 1fea1c9e23fa4b2ff0b2e8f6e81091c31ee5f9ee Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 22:24:25 +0100 Subject: [PATCH 16/19] add the view --- django_code/apps/cloudmanager/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index b1bdaaa..5814de5 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -98,7 +98,7 @@ def Check_server_supposed_XXX(expected_status,verbose=False): def retrieve_and_apply(verbose=False): output = "" - output =+ Give_current_hour() + output += Give_current_hour() output += "\n" -- 2.54.0 From 1ae2917263d74ac0567dd5b082bc0d2179d62508 Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 22:26:25 +0100 Subject: [PATCH 17/19] stringify --- django_code/apps/cloudmanager/utils.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index 5814de5..7eff784 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -98,8 +98,8 @@ def Check_server_supposed_XXX(expected_status,verbose=False): def retrieve_and_apply(verbose=False): output = "" - output += Give_current_hour() - output += "\n" + output += str(Give_current_hour()) + output += str("\n") #Get current replica to compare with the replicas created at the start @@ -115,7 +115,7 @@ def retrieve_and_apply(verbose=False): if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP") else: echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) - output += echo + output += str(echo) output =+ "\n" print(echo) @@ -132,8 +132,8 @@ def retrieve_and_apply(verbose=False): else: echo = "Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) - output += echo - output =+ "\n" + output += str(echo) + output =+ str("\n") print(echo) scale_down(namespace_name=server[1],deploy_name=server[0]) -- 2.54.0 From bfdf8b3b2a905470a35b4472a000241c1363365e Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Thu, 10 Sep 2026 22:28:42 +0100 Subject: [PATCH 18/19] stringify --- django_code/apps/cloudmanager/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index 7eff784..cebfe21 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -116,7 +116,7 @@ def retrieve_and_apply(verbose=False): else: echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) output += str(echo) - output =+ "\n" + output += "\n" print(echo) scale_up(namespace_name=server[1],deploy_name=server[0],replicas=server[2]) @@ -133,7 +133,7 @@ def retrieve_and_apply(verbose=False): echo = "Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) output += str(echo) - output =+ str("\n") + output += str("\n") print(echo) scale_down(namespace_name=server[1],deploy_name=server[0]) -- 2.54.0 From 7a02fb89f4be486cdee3354c3b3c0735be1e9b38 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Fri, 11 Sep 2026 09:41:24 +0100 Subject: [PATCH 19/19] remove django_q --- django_code/core/settings.py | 11 ----------- requirements.txt | 1 - 2 files changed, 12 deletions(-) diff --git a/django_code/core/settings.py b/django_code/core/settings.py index e6df325..0434252 100644 --- a/django_code/core/settings.py +++ b/django_code/core/settings.py @@ -53,7 +53,6 @@ INSTALLED_APPS = [ 'apps.streaming.apps.StreamingConfig', 'import_export', 'djangoql', - 'django_q', 'admin_extra_buttons', ] @@ -253,13 +252,3 @@ PROXIES = { "http" : PROXY_URL, "https" : PROXY_URL } -Q_CLUSTER = { - 'name': 'DjangORM', - 'workers': 4, - 'timeout': 90, - 'retry': 120, - 'queue_limit': 50, - 'bulk': 10, - 'orm': 'default', - "sync": True -} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e8cc902..e10497c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,5 +16,4 @@ bitwarden_sdk xmltodict whitenoise djangoql -django-q2 django-admin-extra-buttons -- 2.54.0