From 3fbf333d3d60d8dcf0b2638ab4d6a01065bb7b40 Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Sun, 13 Sep 2026 16:31:42 +0100 Subject: [PATCH 01/12] ordering by name --- django_code/apps/cloudmanager/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/django_code/apps/cloudmanager/admin.py b/django_code/apps/cloudmanager/admin.py index 4f0ff4b..8b08610 100644 --- a/django_code/apps/cloudmanager/admin.py +++ b/django_code/apps/cloudmanager/admin.py @@ -90,6 +90,7 @@ class DeploymentDataAdmin(ImportExportModelAdmin,ExtraButtonsMixin, MultiDBModel 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] + ordering = ('name',) @button() def retrieve_and_apply(self, request): # your business logic here -- 2.54.0 From c8ceaab95062cc2a5de7000f8606df22953ccd1d Mon Sep 17 00:00:00 2001 From: pierre geeraert Date: Sun, 13 Sep 2026 16:46:33 +0100 Subject: [PATCH 02/12] untested bit of code --- .../0003_deployment_data_do_not_touch_until.py | 18 ++++++++++++++++++ django_code/apps/cloudmanager/models.py | 1 + django_code/apps/cloudmanager/utils.py | 4 ++++ 3 files changed, 23 insertions(+) create mode 100644 django_code/apps/cloudmanager/migrations/0003_deployment_data_do_not_touch_until.py diff --git a/django_code/apps/cloudmanager/migrations/0003_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0003_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..7fcedba --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0003_deployment_data_do_not_touch_until.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.29 on 2026-09-13 15:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0002_deployment_data_actual_replica'), + ] + + operations = [ + migrations.AddField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateField(blank=True, null=True, verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/models.py b/django_code/apps/cloudmanager/models.py index 3a05b3f..a649225 100644 --- a/django_code/apps/cloudmanager/models.py +++ b/django_code/apps/cloudmanager/models.py @@ -55,6 +55,7 @@ class Deployment_Data(models.Model): schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL) replicas = models.IntegerField() actual_replica = models.IntegerField() + do_not_touch_until = models.DateField('do_not_touch_until', blank=True, null=True) class Meta: db_table = 'machine' diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index cebfe21..6b37af6 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -89,6 +89,9 @@ def Check_server_supposed_XXX(expected_status,verbose=False): replicas = deployment.replicas display_list.append(replicas) if verbose : print("replicas: "+str(replicas)) + do_not_touch_until = deployment.do_not_touch_until + display_list.append(do_not_touch_until) + if verbose : print("do_not_touch_until: "+str(do_not_touch_until)) #Adding the whole object as well for future use display_list.append(deployment) deployments_list.append(display_list) @@ -113,6 +116,7 @@ def retrieve_and_apply(verbose=False): #check if the expected replica (server[2]) match the current replica of the deployment (server[3].actual_replica) if server[3].actual_replica == server[2]: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP") + #if server[3].do_not_touch_until is after now , do something else: echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) output += str(echo) -- 2.54.0 From e2f49a5b1fc90b964b1a2193136a554d25811443 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 10:44:41 +0100 Subject: [PATCH 03/12] untested addition of the condition and scale up and down function --- django_code/apps/cloudmanager/models.py | 2 +- django_code/apps/cloudmanager/urls.py | 5 +++-- django_code/apps/cloudmanager/utils.py | 5 ++++- django_code/apps/cloudmanager/views.py | 10 ++++++++++ 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/django_code/apps/cloudmanager/models.py b/django_code/apps/cloudmanager/models.py index a649225..9c96270 100644 --- a/django_code/apps/cloudmanager/models.py +++ b/django_code/apps/cloudmanager/models.py @@ -55,7 +55,7 @@ class Deployment_Data(models.Model): schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL) replicas = models.IntegerField() actual_replica = models.IntegerField() - do_not_touch_until = models.DateField('do_not_touch_until', blank=True, null=True) + do_not_touch_until = models.DateField('do_not_touch_until', blank=True, null=True, auto_now_add=True) class Meta: db_table = 'machine' diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 2b05d99..5918070 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,retrieve_and_apply_view +from .views import coucou,display,hello,import_namespace_view,retrieve_and_apply_view,scale_up_gui,scale_down_gui urlpatterns = [ @@ -26,5 +26,6 @@ urlpatterns = [ 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'), - + path('scale_up//', scale_up_gui), + path('scale_down//', scale_down_gui), ] diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index 6b37af6..488019b 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -116,7 +116,8 @@ def retrieve_and_apply(verbose=False): #check if the expected replica (server[2]) match the current replica of the deployment (server[3].actual_replica) if server[3].actual_replica == server[2]: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP") - #if server[3].do_not_touch_until is after now , do something + if server[3].do_not_touch_until > timezone.now(): + if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" is in freeze period") else: echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) output += str(echo) @@ -133,6 +134,8 @@ def retrieve_and_apply(verbose=False): #check if the current replica of the deployment (server[3].actual_replica) is already 0 meaning the server is already down if server[3].actual_replica == 0: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already DOWN") + if server[3].do_not_touch_until > timezone.now(): + if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" is in freeze period") else: echo = "Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index 484e67b..2018e0e 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -5,6 +5,7 @@ from django.shortcuts import render 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,retrieve_and_apply +from apps.kubernetes_connection.utils import scale_up,scale_down def coucou(request): # 1. Prepare the data inside the function @@ -55,3 +56,12 @@ def redirect(request): print(list_servers_up) return render(request, 'cloudmanager/cmm_blank_page.html', {'list_servers_up':list_servers_up}) +def scale_up_gui(request,namespace_name,deploy_name,replicas=1): + scale_up(namespace_name=namespace_name,deploy_name=deploy_name,replicas=replicas) + return render(request, 'dashboard/start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'}) + + +def scale_down_gui(request,namespace_name,deploy_name): + scale_down(namespace_name=namespace_name,deploy_name=deploy_name) + return render(request, 'dashboard/shutdown.html', + {'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'}) -- 2.54.0 From cc0eb74090b750a19a9f08cf86596920059536e1 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 15:09:16 +0100 Subject: [PATCH 04/12] add the time test --- ...lter_deployment_data_do_not_touch_until.py | 18 ++++++++ django_code/apps/cloudmanager/models.py | 2 +- django_code/apps/cloudmanager/urls.py | 2 - django_code/apps/cloudmanager/views.py | 43 +++---------------- 4 files changed, 24 insertions(+), 41 deletions(-) create mode 100644 django_code/apps/cloudmanager/migrations/0004_alter_deployment_data_do_not_touch_until.py diff --git a/django_code/apps/cloudmanager/migrations/0004_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0004_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..4fd645a --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0004_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.30 on 2026-09-14 13:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0003_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/models.py b/django_code/apps/cloudmanager/models.py index 9c96270..9ec2274 100644 --- a/django_code/apps/cloudmanager/models.py +++ b/django_code/apps/cloudmanager/models.py @@ -55,7 +55,7 @@ class Deployment_Data(models.Model): schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL) replicas = models.IntegerField() actual_replica = models.IntegerField() - do_not_touch_until = models.DateField('do_not_touch_until', blank=True, null=True, auto_now_add=True) + do_not_touch_until = models.DateTimeField('do_not_touch_until', blank=True, null=True, auto_now_add=True) class Meta: db_table = 'machine' diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index 5918070..f160b54 100644 --- a/django_code/apps/cloudmanager/urls.py +++ b/django_code/apps/cloudmanager/urls.py @@ -22,8 +22,6 @@ from .views import coucou,display,hello,import_namespace_view,retrieve_and_apply urlpatterns = [ ################### cloudmanager ################### path('', hello, name='hello'), - 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'), path('scale_up//', scale_up_gui), diff --git a/django_code/apps/cloudmanager/views.py b/django_code/apps/cloudmanager/views.py index 2018e0e..c888453 100644 --- a/django_code/apps/cloudmanager/views.py +++ b/django_code/apps/cloudmanager/views.py @@ -1,31 +1,11 @@ from django.http import HttpResponse from django.shortcuts import render +from datetime import timedelta +from django.utils import timezone -# 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,retrieve_and_apply from apps.kubernetes_connection.utils import scale_up,scale_down - -def coucou(request): - # 1. Prepare the data inside the function - data = CmmData( - name="test", - namespace="testspace", - schedule_hour="1", - schedule_day="deux", - replicas=3 - ) - - # 2. This line actually pushes the data into your cloudmanager_db! - data.save() - - return HttpResponse('

Hello cmm! Data saved successfully!

') - -def display(request): - data = CmmData.objects.all() - print(data[0].namespace) - return HttpResponse(data) +from .models import Deployment_Data def hello(request): list_schedule = ['schedule1','schedule2'] @@ -41,27 +21,14 @@ 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') - 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}) - def scale_up_gui(request,namespace_name,deploy_name,replicas=1): + Deployment_Data.objects.filter(namespace=namespace_name,name=deploy_name).update(do_not_touch_until=timezone.now() + timedelta(hours=1)) scale_up(namespace_name=namespace_name,deploy_name=deploy_name,replicas=replicas) return render(request, 'dashboard/start.html', {'namespace':namespace_name,'deployment': deploy_name, 'url': 'https://namespace.com'}) def scale_down_gui(request,namespace_name,deploy_name): + Deployment_Data.objects.filter(namespace=namespace_name,name=deploy_name).update(do_not_touch_until=timezone.now() + timedelta(hours=1)) scale_down(namespace_name=namespace_name,deploy_name=deploy_name) return render(request, 'dashboard/shutdown.html', {'namespace': namespace_name, 'deployment': deploy_name, 'url': 'https://namespace.com'}) -- 2.54.0 From 154717aca7179dbeb0abcd8d4583f35659c8f172 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 15:22:13 +0100 Subject: [PATCH 05/12] should be good --- ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ django_code/apps/cloudmanager/models.py | 4 ++-- django_code/apps/cloudmanager/utils.py | 2 +- 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 django_code/apps/cloudmanager/migrations/0005_alter_deployment_data_do_not_touch_until.py create mode 100644 django_code/apps/cloudmanager/migrations/0006_alter_deployment_data_do_not_touch_until.py diff --git a/django_code/apps/cloudmanager/migrations/0005_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0005_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..691c765 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0005_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:14 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0004_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=datetime.datetime(2026, 9, 14, 14, 14, 29, 566084, tzinfo=datetime.timezone.utc), verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/migrations/0006_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0006_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..9a5ec42 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0006_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:14 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0005_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=datetime.datetime(2026, 9, 14, 14, 14, 33, 642627, tzinfo=datetime.timezone.utc), verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/models.py b/django_code/apps/cloudmanager/models.py index 9ec2274..dba679b 100644 --- a/django_code/apps/cloudmanager/models.py +++ b/django_code/apps/cloudmanager/models.py @@ -1,6 +1,6 @@ from django.db import models - +from django.utils import timezone class Schedule_Week_Data(models.Model): @@ -55,7 +55,7 @@ class Deployment_Data(models.Model): schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL) replicas = models.IntegerField() actual_replica = models.IntegerField() - do_not_touch_until = models.DateTimeField('do_not_touch_until', blank=True, null=True, auto_now_add=True) + do_not_touch_until = models.DateTimeField('do_not_touch_until', default=timezone.now()) class Meta: db_table = 'machine' diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index 488019b..eea4fed 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -1,4 +1,4 @@ -import datetime +from django.utils import timezone from apps.kubernetes_connection.utils import get_namespace,get_deployments,scale_up,scale_down from apps.cloudmanager.models import Schedule_Day_Data,Schedule_Week_Data,Namespace_Data,Deployment_Data -- 2.54.0 From 98a969fa04fe9af239a42dc9938f650c8a1b439e Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 15:34:28 +0100 Subject: [PATCH 06/12] remove old imports --- django_code/apps/cloudmanager/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_code/apps/cloudmanager/urls.py b/django_code/apps/cloudmanager/urls.py index f160b54..c8869f0 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,retrieve_and_apply_view,scale_up_gui,scale_down_gui +from .views import hello,import_namespace_view,retrieve_and_apply_view,scale_up_gui,scale_down_gui urlpatterns = [ -- 2.54.0 From 2e728d4698796e9cd3a90a4c63f78fc4dc48386a Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 15:36:29 +0100 Subject: [PATCH 07/12] add migration file --- ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 django_code/apps/cloudmanager/migrations/0007_alter_deployment_data_do_not_touch_until.py create mode 100644 django_code/apps/cloudmanager/migrations/0008_alter_deployment_data_do_not_touch_until.py diff --git a/django_code/apps/cloudmanager/migrations/0007_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0007_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..4beccb8 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0007_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:35 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0006_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=datetime.datetime(2026, 9, 14, 14, 35, 47, 473312, tzinfo=datetime.timezone.utc), verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/migrations/0008_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0008_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..35b1ec7 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0008_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:35 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0007_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=datetime.datetime(2026, 9, 14, 14, 35, 51, 657797, tzinfo=datetime.timezone.utc), verbose_name='do_not_touch_until'), + ), + ] -- 2.54.0 From f6875b498ba8c9411cd1113d4bb3847572102784 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 15:42:15 +0100 Subject: [PATCH 08/12] add back timezone as it was required --- 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 eea4fed..496c97c 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -1,5 +1,5 @@ from django.utils import timezone - +import datetime from apps.kubernetes_connection.utils import get_namespace,get_deployments,scale_up,scale_down from apps.cloudmanager.models import Schedule_Day_Data,Schedule_Week_Data,Namespace_Data,Deployment_Data -- 2.54.0 From 712f3d50b583a42764a2da43b0040af3fb1cc266 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 15:46:51 +0100 Subject: [PATCH 09/12] add back timezone as it was required --- ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ ...lter_deployment_data_do_not_touch_until.py | 18 ++++++++++++++++++ django_code/apps/cloudmanager/models.py | 5 +---- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 django_code/apps/cloudmanager/migrations/0009_alter_deployment_data_do_not_touch_until.py create mode 100644 django_code/apps/cloudmanager/migrations/0010_alter_deployment_data_do_not_touch_until.py create mode 100644 django_code/apps/cloudmanager/migrations/0011_alter_deployment_data_do_not_touch_until.py diff --git a/django_code/apps/cloudmanager/migrations/0009_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0009_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..c92d155 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0009_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:43 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0008_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=datetime.datetime(2026, 9, 14, 14, 43, 26, 985719, tzinfo=datetime.timezone.utc), verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/migrations/0010_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0010_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..d254818 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0010_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:43 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0009_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=datetime.datetime(2026, 9, 14, 14, 43, 31, 55115, tzinfo=datetime.timezone.utc), verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/migrations/0011_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0011_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..5306b27 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0011_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.30 on 2026-09-14 14:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0010_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/models.py b/django_code/apps/cloudmanager/models.py index dba679b..5e30efa 100644 --- a/django_code/apps/cloudmanager/models.py +++ b/django_code/apps/cloudmanager/models.py @@ -1,8 +1,5 @@ from django.db import models -from django.utils import timezone - - class Schedule_Week_Data(models.Model): name_schedule = models.CharField(max_length=100,unique=True) state_Monday = models.BooleanField() @@ -55,7 +52,7 @@ class Deployment_Data(models.Model): schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL) replicas = models.IntegerField() actual_replica = models.IntegerField() - do_not_touch_until = models.DateTimeField('do_not_touch_until', default=timezone.now()) + do_not_touch_until = models.DateTimeField('do_not_touch_until', blank=True, null=True, auto_now_add=True) class Meta: db_table = 'machine' -- 2.54.0 From 6b631fb3e379ee3e19e2ffa7ab8b6fd257276284 Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 16:12:33 +0100 Subject: [PATCH 10/12] this was supposed to be deleted --- django_code/apps/cloudmanager/utils.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py index 496c97c..3e1a972 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -89,9 +89,6 @@ def Check_server_supposed_XXX(expected_status,verbose=False): replicas = deployment.replicas display_list.append(replicas) if verbose : print("replicas: "+str(replicas)) - do_not_touch_until = deployment.do_not_touch_until - display_list.append(do_not_touch_until) - if verbose : print("do_not_touch_until: "+str(do_not_touch_until)) #Adding the whole object as well for future use display_list.append(deployment) deployments_list.append(display_list) -- 2.54.0 From c880172aa53be30d7b67958a360805bf3f245aad Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 16:15:03 +0100 Subject: [PATCH 11/12] use function for default --- ...lter_deployment_data_do_not_touch_until.py | 19 +++++++++++++++++++ django_code/apps/cloudmanager/models.py | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 django_code/apps/cloudmanager/migrations/0012_alter_deployment_data_do_not_touch_until.py diff --git a/django_code/apps/cloudmanager/migrations/0012_alter_deployment_data_do_not_touch_until.py b/django_code/apps/cloudmanager/migrations/0012_alter_deployment_data_do_not_touch_until.py new file mode 100644 index 0000000..2235739 --- /dev/null +++ b/django_code/apps/cloudmanager/migrations/0012_alter_deployment_data_do_not_touch_until.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.30 on 2026-09-14 15:13 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('cloudmanager', '0011_alter_deployment_data_do_not_touch_until'), + ] + + operations = [ + migrations.AlterField( + model_name='deployment_data', + name='do_not_touch_until', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='do_not_touch_until'), + ), + ] diff --git a/django_code/apps/cloudmanager/models.py b/django_code/apps/cloudmanager/models.py index 5e30efa..5eed0c7 100644 --- a/django_code/apps/cloudmanager/models.py +++ b/django_code/apps/cloudmanager/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.utils import timezone class Schedule_Week_Data(models.Model): name_schedule = models.CharField(max_length=100,unique=True) @@ -52,7 +53,7 @@ class Deployment_Data(models.Model): schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL) replicas = models.IntegerField() actual_replica = models.IntegerField() - do_not_touch_until = models.DateTimeField('do_not_touch_until', blank=True, null=True, auto_now_add=True) + do_not_touch_until = models.DateTimeField('do_not_touch_until', default=timezone.now) class Meta: db_table = 'machine' -- 2.54.0 From 7a5c7b6de9344feff97751250ad8002706d9fc8f Mon Sep 17 00:00:00 2001 From: "pierre.geeraert" Date: Mon, 14 Sep 2026 16:32:37 +0100 Subject: [PATCH 12/12] use ELIF as otherwise the else is ignored --- 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 3e1a972..497b229 100644 --- a/django_code/apps/cloudmanager/utils.py +++ b/django_code/apps/cloudmanager/utils.py @@ -113,7 +113,7 @@ def retrieve_and_apply(verbose=False): #check if the expected replica (server[2]) match the current replica of the deployment (server[3].actual_replica) if server[3].actual_replica == server[2]: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already UP") - if server[3].do_not_touch_until > timezone.now(): + elif server[3].do_not_touch_until > timezone.now(): if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" is in freeze period") else: echo = "Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]) @@ -131,7 +131,7 @@ def retrieve_and_apply(verbose=False): #check if the current replica of the deployment (server[3].actual_replica) is already 0 meaning the server is already down if server[3].actual_replica == 0: if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" already DOWN") - if server[3].do_not_touch_until > timezone.now(): + elif server[3].do_not_touch_until > timezone.now(): if verbose : print("name: "+str(server[1])+" namespace: "+str(server[0])+" is in freeze period") else: -- 2.54.0