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(): namespaces_list = get_namespace() for namespace in namespaces_list: Namespace_Data.objects.get_or_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: Deployment_Data.objects.get_or_create(namespace=deployment[0],name=deployment[1],defaults={"replicas":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 Check_server_supposed_XXX(expected_status): #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) #print("---------------------------------------------------------") #print("-----------------Expected status: -----------------------") #print("-----------------"+str(expected_status)+"-----------------------") #print("---------------------------------------------------------") deployments_list = [] for deployment in deployments: display_list = [] name = deployment.name display_list.append(name) print("name: "+str(name)) namespace = deployment.namespace display_list.append(namespace) print("namespace: "+str(namespace)) replicas = deployment.replicas display_list.append(replicas) print("replicas: "+str(replicas)) deployments_list.append(display_list) return deployments_list def retrieve_and_apply(): print("------------------------------------------") print("-----------------UP-----------------------") print("------------------------------------------") servers_supposed_true = Check_server_supposed_XXX(True) for server in servers_supposed_true: print("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: print("name: "+str(server[1])+" namespace: "+str(server[0])+" replicas: "+str(server[2])) scale_down(namespace_name=server[1],deploy_name=server[0])