122 lines
3.9 KiB
Python
122 lines
3.9 KiB
Python
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
|
|
from apps.kubernetes_connection.utils import scale_up,scale_down
|
|
|
|
DB = 'cloudmanager_db'
|
|
|
|
|
|
@admin.action(description="scale up")
|
|
def scale_up_deploy(modeladmin, request, queryset):
|
|
for query in queryset.values():
|
|
scale_up(namespace_name=query['namespace'],deploy_name=query['name'],replicas=query['replicas'])
|
|
modeladmin.message_user(
|
|
request,
|
|
ngettext(
|
|
"%d server was successfully scaled up.",
|
|
"%d servers were successfully scaled up.",
|
|
queryset.values().count(),
|
|
)
|
|
% queryset.values().count(),
|
|
messages.SUCCESS,
|
|
)
|
|
|
|
|
|
@admin.action(description="scale down")
|
|
def scale_down_deploy(modeladmin, request, queryset):
|
|
for query in queryset.values():
|
|
scale_down(namespace_name=query['namespace'],deploy_name=query['name'])
|
|
modeladmin.message_user(
|
|
request,
|
|
ngettext(
|
|
"%d server was successfully scaled down.",
|
|
"%d servers were successfully scaled down.",
|
|
queryset.values().count(),
|
|
)
|
|
% queryset.values().count(),
|
|
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="import namespace")
|
|
def import_namespace_admin(modeladmin, request, queryset):
|
|
#
|
|
#
|
|
#
|
|
# don't forgot to clear thge quyeryset before running this
|
|
#
|
|
import_namespace(Namespace_Data.objects)
|
|
#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="import deployment")
|
|
def import_deployment_admin(modeladmin, request, queryset):
|
|
#
|
|
#
|
|
#
|
|
# don't forgot to clear thge quyeryset before running this
|
|
#
|
|
import_deployment(Deployment_Data.objects)
|
|
|
|
|
|
|
|
class ActiveAtHourFilter(admin.SimpleListFilter):
|
|
title = 'Active at hour'
|
|
parameter_name = 'active_at_hour'
|
|
|
|
def lookups(self, request, model_admin):
|
|
return [(str(h), f'{h:02d}:00') for h in range(24)]
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() is not None:
|
|
hour = self.value()
|
|
return queryset.filter(**{f'schedule_day__state_at_{hour}': True})
|
|
return queryset
|
|
|
|
|
|
class MultiDBModelAdmin(admin.ModelAdmin):
|
|
"""Base class that pins all admin operations to DB."""
|
|
db = DB
|
|
|
|
def get_queryset(self, request):
|
|
return super().get_queryset(request).using(self.db)
|
|
|
|
def save_model(self, request, obj, form, change):
|
|
obj.save(using=self.db)
|
|
|
|
def delete_model(self, request, obj):
|
|
obj.delete(using=self.db)
|
|
|
|
def delete_queryset(self, request, queryset):
|
|
queryset.using(self.db).delete()
|
|
|
|
|
|
@admin.register(Deployment_Data)
|
|
class DeploymentDataAdmin(MultiDBModelAdmin):
|
|
list_display = ('name', 'namespace', 'schedule_week', 'schedule_day', 'replicas')
|
|
list_filter = (ActiveAtHourFilter,)
|
|
actions = [scale_up_deploy,scale_down_deploy]
|
|
|
|
|
|
@admin.register(Schedule_Day_Data)
|
|
class ScheduleDayAdmin(MultiDBModelAdmin):
|
|
list_display = ['name_schedule'] + [f'state_at_{h}' for h in range(24)]
|
|
|
|
|
|
@admin.register(Schedule_Week_Data)
|
|
class ScheduleWeekAdmin(MultiDBModelAdmin):
|
|
list_display = (
|
|
'name_schedule',
|
|
'state_Monday', 'state_Tuesday', 'state_Wednesday',
|
|
'state_Thursday', 'state_Friday', 'state_Saturday', 'state_Sunday',
|
|
)
|
|
|
|
@admin.register(Namespace_Data)
|
|
class NamespaceAdmin(MultiDBModelAdmin):
|
|
list_display = ('namespace',)
|
|
actions = [import_namespace_admin] |