Testing #42

Merged
pi-ux-ce merged 36 commits from testing into main 2026-09-09 13:40:47 +00:00
7 changed files with 175 additions and 34 deletions
+28 -16
View File
@@ -1,7 +1,7 @@
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,namespace_cmm_data_object
from .utils import import_namespace
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 apps.kubernetes_connection.utils import scale_up,scale_down
DB = 'cloudmanager_db'
@@ -38,21 +38,32 @@ def scale_down_deploy(modeladmin, request, queryset):
messages.SUCCESS,
)
@admin.action(description="create_entry")
def create_entry(modeladmin, request, queryset):
print("simpsons_data_object.create(season=2, episode=3, url='google.com'', seen=True)")
#call function to trigger refresh of all deploy
@admin.action(description="Expected False")
def Check_server_supposed_False(modeladmin, request, queryset):
servers_supposed_false = Check_server_supposed_XXX(False)
for server in servers_supposed_false:
messages.add_message(request, messages.INFO, server)
@admin.action(description="Expected True")
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):
#
#
#
# don't forgot to clear thge quyeryset before running this
#
import_namespace(namespace_cmm_data_object)
print("simpsons_data_object.create(season=2, episode=3, url='google.com'', seen=True)")
#call function to trigger refresh of all deploy
import_namespace()
@admin.action(description="import deployment")
def import_deployment_admin(modeladmin, request, queryset):
import_deployment()
class ActiveAtHourFilter(admin.SimpleListFilter):
@@ -90,13 +101,13 @@ class MultiDBModelAdmin(admin.ModelAdmin):
class DeploymentDataAdmin(MultiDBModelAdmin):
list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas')
list_filter = (ActiveAtHourFilter,)
actions = [scale_up_deploy,scale_down_deploy]
actions = [Check_server_supposed_False,Check_server_supposed_true,scale_up_deploy,scale_down_deploy,import_deployment_admin,generate_default_day_schedule_admin]
@admin.register(Schedule_Day_Data)
class ScheduleDayAdmin(MultiDBModelAdmin):
list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)]
actions = [import_deployment_admin,generate_default_day_schedule_admin]
@admin.register(Schedule_Week_Data)
class ScheduleWeekAdmin(MultiDBModelAdmin):
@@ -105,6 +116,7 @@ class ScheduleWeekAdmin(MultiDBModelAdmin):
'state_Monday', 'state_Tuesday', 'state_Wednesday',
'state_Thursday', 'state_Friday', 'state_Saturday', 'state_Sunday',
)
actions = [import_deployment_admin,generate_default_day_schedule_admin]
@admin.register(Namespace_Data)
class NamespaceAdmin(MultiDBModelAdmin):
@@ -0,0 +1,19 @@
# Generated by Django 4.2.30 on 2026-09-09 12:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('cloudmanager', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='deployment_data',
name='actual_replica',
field=models.IntegerField(default=1),
preserve_default=False,
),
]
+2 -2
View File
@@ -2,6 +2,7 @@ from django.db import models
class Schedule_Week_Data(models.Model):
name_schedule = models.CharField(max_length=100,unique=True)
state_Monday = models.BooleanField()
@@ -53,6 +54,7 @@ class Deployment_Data(models.Model):
schedule_week = models.ForeignKey(Schedule_Week_Data,null=True, blank=True, on_delete=models.SET_NULL)
schedule_day = models.ForeignKey(Schedule_Day_Data,null=True, blank=True, on_delete=models.SET_NULL)
replicas = models.IntegerField()
actual_replica = models.IntegerField()
class Meta:
db_table = 'machine'
@@ -61,5 +63,3 @@ class Namespace_Data(models.Model):
#deployments = models.ForeignKey(Schedule_Week_Data,null=True, blank=True, on_delete=models.SET_NULL)
class Meta:
db_table = 'namespace'
namespace_cmm_data_object = Namespace_Data.objects.using('cloudmanager_db')
+115 -7
View File
@@ -1,13 +1,121 @@
from apps.kubernetes_connection.utils import get_namespace
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
def import_namespace(queryset):
def import_namespace():
namespaces_list = get_namespace()
for namespace in namespaces_list:
queryset.create(namespace=namespace)
if namespace[0]!="kube-system":
Namespace_Data.objects.get_or_create(namespace=namespace)
def import_deployment(queryset):
namespaces_list = get_namespace()
#for namespace in namespaces_list:
# queryset.create(namespace=namespace)
def import_deployment():
deployment_list = get_deployments()
Schedule_Day_Always_off,Schedule_Day_Always_on = generate_default_day_schedule()
Schedule_Week_Always_off,Schedule_Week_Always_on = generate_default_week_schedule()
for deployment in deployment_list:
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})
def generate_default_day_schedule():
Always_off,status = Schedule_Day_Data.objects.update_or_create(name_schedule="Always_off",defaults={"state_at_0" : False ,"state_at_1" : False ,"state_at_2" : False ,"state_at_3" : False ,"state_at_4" : False ,"state_at_5" : False ,"state_at_6" : False ,"state_at_7" : False ,"state_at_8" : False ,"state_at_9" : False ,"state_at_10" : False ,"state_at_11" : False ,"state_at_12" : False ,"state_at_13" : False ,"state_at_14" : False ,"state_at_15" : False ,"state_at_16" : False ,"state_at_17" : False ,"state_at_18" : False ,"state_at_19" : False ,"state_at_20" : False ,"state_at_21" : False ,"state_at_22" : False ,"state_at_23" : False})
Always_on,status = Schedule_Day_Data.objects.update_or_create(name_schedule="Always_on",defaults={"state_at_0" : True ,"state_at_1" : True ,"state_at_2" : True ,"state_at_3" : True ,"state_at_4" : True ,"state_at_5" : True ,"state_at_6" : True ,"state_at_7" : True ,"state_at_8" : True ,"state_at_9" : True ,"state_at_10" : True ,"state_at_11" : True ,"state_at_12" : True ,"state_at_13" : True ,"state_at_14" : True ,"state_at_15" : True ,"state_at_16" : True ,"state_at_17" : True ,"state_at_18" : True ,"state_at_19" : True ,"state_at_20" : True ,"state_at_21" : True ,"state_at_22" : True ,"state_at_23" : True})
return Always_off,Always_on
def generate_default_week_schedule():
Always_off,status = Schedule_Week_Data.objects.update_or_create(name_schedule="Always_off",defaults={"state_Monday" : False , "state_Tuesday" : False , "state_Wednesday" : False , "state_Thursday" : False , "state_Friday" : False , "state_Saturday" : False , "state_Sunday" : False})
Always_on,status = Schedule_Week_Data.objects.update_or_create(name_schedule="Always_on",defaults={"state_Monday" : True , "state_Tuesday" : True , "state_Wednesday" : True , "state_Thursday" : True , "state_Friday" : True , "state_Saturday" : True , "state_Sunday" : True})
return Always_off,Always_on
def Give_current_weekday():
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday', 'Sunday']
weekday = days[datetime.datetime.today().weekday()]
return weekday
def Give_current_hour():
now = datetime.datetime.now()
return now.hour
def get_current_replicas():
deployments_list = get_deployments()
for deployment in deployments_list:
if deployment[0]!="kube-system":
object,created = Deployment_Data.objects.update_or_create(namespace=deployment[0],name=deployment[1],defaults={"actual_replica":deployment[2]})
if created:
print("THIS DEPLOY: name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2])+" IS NEW !!!!!")
return 0
def Check_server_supposed_XXX(expected_status,verbose=False):
#just for testing
#expected_status = True
# Get week schedule
argument_week="state_"+str(Give_current_weekday())
query_week = {argument_week : expected_status}
schedules_week = Schedule_Week_Data.objects.filter(**query_week)
# Get day schedule
argument_day="state_at_"+str(Give_current_hour())
query_day = {argument_day : expected_status}
schedules_day = Schedule_Day_Data.objects.filter(**query_day)
if expected_status:
deployments = Deployment_Data.objects.filter(schedule_week__in=schedules_week, schedule_day__in=schedules_day)
else:
deployments = Deployment_Data.objects.filter(schedule_week__in=schedules_week) | Deployment_Data.objects.filter(schedule_day__in=schedules_day)
deployments_list = []
for deployment in deployments:
display_list = []
name = deployment.name
display_list.append(name)
if verbose : print("name: "+str(name))
namespace = deployment.namespace
display_list.append(namespace)
if verbose : print("namespace: "+str(namespace))
replicas = deployment.replicas
display_list.append(replicas)
if verbose : print("replicas: "+str(replicas))
#Adding the whole object as well for future use
display_list.append(deployment)
deployments_list.append(display_list)
return deployments_list
def retrieve_and_apply(verbose=False):
#Get current replica to compare with the replicas created at the start
get_current_replicas()
print("------------------------------------------")
print("-----------------UP-----------------------")
print("------------------------------------------")
servers_supposed_true = Check_server_supposed_XXX(True)
for server in servers_supposed_true:
#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")
else:
print("Starting -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]))
scale_up(namespace_name=server[1],deploy_name=server[0],replicas=server[2])
print("------------------------------------------")
print("----------------DOWN----------------------")
print("------------------------------------------")
servers_supposed_false = Check_server_supposed_XXX(False)
for server in servers_supposed_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")
else:
print("Shutting down -> name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2]))
scale_down(namespace_name=server[1],deploy_name=server[0])
@@ -32,26 +32,27 @@ def import_Deployments():
test.items[2].spec.template.spec.containers[0].name # name the third deploy within the namespace
return 0
def get_namespace():
def get_namespace(verbose=False):
config.load_kube_config(config_file='/kubeconfig/config')
core = client.CoreV1Api()
namespace = core.list_namespace()
namespace_list = []
for i in range(0,len(namespace.items)):
print(namespace.items[i].metadata.name)
if verbose : print(namespace.items[i].metadata.name)
namespace_list.append(namespace.items[i].metadata.name)
return namespace_list
def get_deployments():
def get_deployments(verbose=False):
config.load_kube_config(config_file='/kubeconfig/config')
api = client.AppsV1Api()
namespaces_list = get_namespace()
deployments_list = []
for namespace in namespaces_list:
print(namespace)
if verbose : print(namespace)
deployments = api.list_namespaced_deployment(namespace)
for deployment_index in range(0,len(deployments.items)):
deployment = deployments.items[deployment_index].metadata.name
print(" "+str(deployment))
deployments_list.append([namespace,deployment])
replicas = deployments.items[deployment_index].spec.replicas
if verbose : print(" "+str(deployment)+" -- Replicas: "+str(replicas))
deployments_list.append([namespace,deployment,replicas])
return deployments_list
+1 -1
View File
@@ -38,7 +38,7 @@ class StreamingRedirectData(models.Model):
def season_information(self, serie_name):
betaserie = betaserieUtils()
print(serie_name)
print(betaserie.identify_serie(serie_name))
print(betaserie.identify_serie(serie_name,True))
return betaserie.series_information(betaserie.identify_serie(serie_name))[0]
def maximum_Number_Season(self, serie_name):
@@ -20,6 +20,7 @@ def redirect(request):
def clearkey_process(request):
key = request.GET.get('key')
key = key.lower()
redirectData.objects.update_or_create(key=key,defaults={'url': "None"})
text_generated = key+" is set to None"