Testing #42
@@ -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,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')
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user