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/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/urls.py b/django_code/apps/cloudmanager/urls.py
index 315940e..2b05d99 100644
--- a/django_code/apps/cloudmanager/urls.py
+++ b/django_code/apps/cloudmanager/urls.py
@@ -15,25 +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 import views as cloudmanager_views
+
+from .views import coucou,display,hello,import_namespace_view,retrieve_and_apply_view
+
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('/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),
-
- ################### 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('', 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'),
]
diff --git a/django_code/apps/cloudmanager/utils.py b/django_code/apps/cloudmanager/utils.py
index a13dc9d..cebfe21 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():
@@ -92,6 +97,10 @@ def Check_server_supposed_XXX(expected_status,verbose=False):
def retrieve_and_apply(verbose=False):
+ output = ""
+ output += str(Give_current_hour())
+ output += str("\n")
+
#Get current replica to compare with the replicas created at the start
get_current_replicas()
@@ -105,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 += str(echo)
+ output += "\n"
+ print(echo)
+
scale_up(namespace_name=server[1],deploy_name=server[0],replicas=server[2])
print("------------------------------------------")
@@ -117,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 += str(echo)
+ output += str("\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 37c8efe..484e67b 100644
--- a/django_code/apps/cloudmanager/views.py
+++ b/django_code/apps/cloudmanager/views.py
@@ -1,7 +1,10 @@
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 .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
def coucou(request):
# 1. Prepare the data inside the function
@@ -23,3 +26,32 @@ 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 import_namespace_view(request):
+ import_namespace()
+ 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')
+ 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/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/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..0434252 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',
+ 'admin_extra_buttons',
]
MIDDLEWARE = [
diff --git a/requirements.txt b/requirements.txt
index 50bc442..e10497c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,5 @@
django
psycopg2
-#xrequests
kubernetes
ruamel.yaml
pyyaml
@@ -17,3 +16,4 @@ bitwarden_sdk
xmltodict
whitenoise
djangoql
+django-admin-extra-buttons