|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +from __future__ import absolute_import, unicode_literals |
| 3 | +from django.conf.urls import patterns, url |
| 4 | +from django.contrib import messages |
| 5 | +from django.core.urlresolvers import reverse |
| 6 | +from django.http import HttpResponseRedirect |
| 7 | +from django.shortcuts import get_object_or_404 |
| 8 | +from django.utils.html import format_html |
| 9 | +from .database_maintenance_task import DatabaseMaintenanceTaskAdmin |
| 10 | +from ..models import DatabaseConfigureStaticDBParams |
| 11 | +from notification.tasks import TaskRegister |
| 12 | + |
| 13 | + |
| 14 | +class DatabaseConfigureStaticDBParamsAdmin(DatabaseMaintenanceTaskAdmin): |
| 15 | + search_fields = ( |
| 16 | + "database__name", "database__databaseinfra__name", "task__id", "task__task_id" |
| 17 | + ) |
| 18 | + |
| 19 | + list_display = ( |
| 20 | + "database", "database_team", "current_step", "current_step_class", "friendly_status", |
| 21 | + "maintenance_action", "link_task", "started_at", "finished_at" |
| 22 | + ) |
| 23 | + |
| 24 | + readonly_fields = ( |
| 25 | + "database", "task", "started_at", |
| 26 | + "link_task", "finished_at", "status", |
| 27 | + "maintenance_action", "task_schedule", |
| 28 | + |
| 29 | + ) |
| 30 | + |
| 31 | + def maintenance_action(self, maintenance): |
| 32 | + if not maintenance.is_status_error: |
| 33 | + return 'N/A' |
| 34 | + |
| 35 | + if not maintenance.can_do_retry: |
| 36 | + return 'N/A' |
| 37 | + |
| 38 | + url = "/admin/maintenance/databaseconfigurestaticdbparams/{}/retry/".format( |
| 39 | + maintenance.id |
| 40 | + ) |
| 41 | + html = ("<a title='Retry' class='btn btn-info' " |
| 42 | + "href='{}'>Retry</a>").format(url) |
| 43 | + return format_html(html) |
| 44 | + |
| 45 | + def get_urls(self): |
| 46 | + base = super(DatabaseConfigureStaticDBParamsAdmin, self).get_urls() |
| 47 | + |
| 48 | + admin = patterns( |
| 49 | + '', |
| 50 | + url( |
| 51 | + r'^/?(?P<configure_static_db_params_id>\d+)/retry/$', |
| 52 | + self.admin_site.admin_view(self.retry_view), |
| 53 | + name="configure_static_db_params_retry" |
| 54 | + ), |
| 55 | + ) |
| 56 | + return admin + base |
| 57 | + |
| 58 | + def retry_view(self, request, configure_static_db_params_id): |
| 59 | + retry_from = get_object_or_404(DatabaseConfigureStaticDBParams, pk=configure_static_db_params_id) |
| 60 | + |
| 61 | + error = False |
| 62 | + if not retry_from.is_status_error: |
| 63 | + error = True |
| 64 | + messages.add_message( |
| 65 | + request, messages.ERROR, |
| 66 | + "You can not do retry because configure static db params status is '{}'".format( |
| 67 | + retry_from.get_status_display() |
| 68 | + ), |
| 69 | + ) |
| 70 | + |
| 71 | + if not retry_from.can_do_retry: |
| 72 | + error = True |
| 73 | + messages.add_message( |
| 74 | + request, messages.ERROR, "Configure Static DB Params retry is disabled" |
| 75 | + ) |
| 76 | + |
| 77 | + if error: |
| 78 | + return HttpResponseRedirect( |
| 79 | + reverse( |
| 80 | + 'admin:maintenance_configurestaticdbparams_change', |
| 81 | + args=(configure_static_db_params_id,) |
| 82 | + ) |
| 83 | + ) |
| 84 | + |
| 85 | + TaskRegister.configure_static_db_params( |
| 86 | + database=retry_from.database, |
| 87 | + user=request.user, |
| 88 | + retry_from=retry_from |
| 89 | + ) |
| 90 | + |
| 91 | + url = reverse('admin:notification_taskhistory_changelist') |
| 92 | + filters = "user={}".format(request.user.username) |
| 93 | + return HttpResponseRedirect('{}?{}'.format(url, filters)) |
0 commit comments