Files
Django_kube/django_code/apps/cloudmanager/admin.py
T
pi-ux-ce f522b69a68
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
add scale down
2026-06-18 17:41:51 +01:00

90 lines
2.8 KiB
Python

from django.contrib import admin,messages
from django.utils.translation import ngettext
from .models import Machine_Data,Schedule_Day_Data,Schedule_Week_Data
from apps.kubernetes_connection.utils import scale_up,scale_down
# Register your models here.
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,
)
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(Machine_Data)
class MachineDataAdmin(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',
)