Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
# Copyright (c) 2014 TrilioData, Inc.
# All Rights Reserved.

import logging

from django import template
try:
    from django.core.urlresolvers import reverse
except ImportError:
    from django.urls import reverse
try:
    from django.core.urlresolvers import reverse_lazy
except ImportError:
    from django.urls import reverse_lazy
from django.http import HttpResponse
from django.template import defaultfilters as filters
from django.utils import http
from django.utils.translation import gettext_lazy as _

from horizon import exceptions
from horizon import messages
from horizon import tables

from trilio_dashboard import workloadmgr
from openstack_dashboard import api

LOG = logging.getLogger(__name__)


class WorkloadSnapshotFull(tables.BatchAction):
    name = "Full Snapshot"
    verbose_name = _("Full Snapshot")
    classes = ("btn-simple", "btn-full-snapshot")
    data_type_singular = _(" ")
    data_type_plural = _(" ")

    @staticmethod
    def action_present(count):
        return _(
            "Full Snapshot"
        )

    @staticmethod
    def action_past(count):
        return _(
            "Scheduled execution of"
        )

    def action(self, request, obj_id):
        try:
            workload_id = obj_id
            workloadmgr.workload_snapshot(
                request, workload_id, full=True, name='', description='')
            LOG.debug('Full snapshot of workload %s scheduled successfully' %
                      workload_id)
        except Exception as ex:
            messages.error(request, str(ex))

    def allowed(self, request, workload):
        if workload is not None:
            return ((workload.status == 'available'))
        else:
            return False


class WorkloadSnapshot(tables.BatchAction):
    name = "Snapshot"
    verbose_name = _("Create Snapshot")
    classes = ("btn-simple", "btn-snapshot")
    # classes = ("ajax-modal", "btn-snapshot")
    data_type_singular = _(" ")
    data_type_plural = _(" ")

    @staticmethod
    def action_present(count):
        return _(
            "Create Snapshot"
        )

    @staticmethod
    def action_past(count):
        return _(
            "Scheduled execution of"
        )

    def action(self, request, obj_id):
        try:
            workload_id = obj_id
            workloadmgr.workload_snapshot(
                request, workload_id, full=False, name='', description='')
            LOG.debug('Snapshot of workload %s scheduled successfully' %
                      workload_id)
        except Exception as ex:
            messages.error(request, str(ex))

    def allowed(self, request, workload):
        if workload is not None:
            return ((workload.status == 'available'))
        else:
            return False


class WorkloadUnlock(tables.BatchAction):
    name = "Unlock"
    verbose_name = _("Unlock")
    classes = ("btn-simple", "btn-unlock")
    data_type_singular = _(" ")
    data_type_plural = _(" ")

    @staticmethod
    def action_present(count):
        return _(
            "Unlock Workload"
        )

    @staticmethod
    def action_past(count):
        return _(
            "Unlocked"
        )

    def action(self, request, obj_id):
        try:
            workload_id = obj_id
            workloadmgr.workload_unlock(request, workload_id)
            LOG.debug('Workload %s unlocked successfully' % workload_id)
        except Exception as ex:
            messages.error(request, str(ex))

    def allowed(self, request, workload):
        if workload is not None:
            return ((workload.status == 'locked'))
        else:
            return False


class WorkloadReset(tables.DeleteAction):
    name = "Reset"
    verbose_name = _("Reset Workload")
    classes = ("btn-danger", "btn-reset")
    data_type_singular = _(" ")
    data_type_plural = _(" ")
    help_text = _("This action will clear only cinder snapshots.")

    @staticmethod
    def action_present(count):
        return _(
            "Reset Workload"
        )

    @staticmethod
    def action_past(count):
        return _(
            "Reset"
        )

    def action(self, request, obj_id):
        try:
            workload_id = obj_id
            workloadmgr.workload_reset(request, workload_id)
            LOG.debug('Workload %s reset successfully' % workload_id)
        except Exception as ex:
            messages.error(request, str(ex))

    def allowed(self, request, workload):
        if workload is not None:
            return ((workload.status == 'available'))
        else:
            return False


class DeleteWorkload(tables.DeleteAction):
    classes = ("btn-danger")
    data_type_singular = _("Workload")
    data_type_plural = _("Workloads")

    @staticmethod
    def action_present(count):
        return _(
            "Delete Workload"
        )

    @staticmethod
    def action_past(count):
        return _(
            "Deleted"
        )

    def delete(self, request, workload_id):
        try:
            workloadmgr.workload_delete(request, workload_id)
            LOG.debug('Deleted workload %s successfully' % workload_id)
        except Exception as ex:
            messages.error(request, str(ex))
    """
    def allowed(self, request, workload):
        if workload is not None:
            return ((workload.status == 'available'))
        else:
            return False
    """


class UpdateRow(tables.Row):
    ajax = True
    name = "update"

    def get_data(self, request, workload_id):
        try:
            workload = workloadmgr.workload_get(request, workload_id)
            LOG.debug('Workload %s data retrieved successfully' % workload_id)
            return workload
        except Exception as ex:
            LOG.exception(ex)
            pass


class CreateWorkload(tables.LinkAction):
    name = "create"
    verbose_name = _("Create Workload")
    url = "horizon:project:workloads:create"
    classes = ("ajax-modal", "btn-create")


class CreateSnapshot(tables.LinkAction):
    name = "snapshot"
    verbose_name = _("Create Snapshot")
    url = "horizon:project:workloads:snapshot"
    classes = ("ajax-modal", "btn-snapshot")

    def allowed(self, request, workload=None):
        return workload.status == "available"


class EditWorkload(tables.LinkAction):
    name = "edit"
    verbose_name = _("Edit Workload")
    url = "horizon:project:workloads:update"
    classes = ("ajax-modal", "btn-update")

    def get_data(self, request, workload_id):
        try:
            workload = workloadmgr.workload_get(request, workload_id)
            LOG.debug('Workload %s data retrieved successfully' % workload_id)
        except Exception as ex:
            messages.error(request, str(ex))
        return workload

    def allowed(self, request, workload=None):
        return workload.status == "available"


class CreateTransfer(tables.LinkAction):
    name = "create_transfer"
    verbose_name = _("Create Transfer")
    url = "horizon:project:workloads:create_transfer"
    classes = ("ajax-modal",)
    policy_rules = (("workload", "workload:create_transfer"),)

    def allowed(self, request, workload=None):
        return workload.status == "available"


class AcceptTransfer(tables.LinkAction):
    name = "accept_transfer"
    verbose_name = _("Accept Transfer")
    url = "horizon:project:workloads:accept_transfer"
    classes = ("ajax-modal",)
    icon = "exchange"
    policy_rules = (("workload", "workload:accept_transfer"),)
    ajax = True

    def single(self, table, request, object_id=None):
        return HttpResponse(self.render())


class AbortTransfer(tables.Action):
    name = "delete_transfer"
    verbose_name = _("Abort Transfer")
    policy_rules = (("workload", "workload:delete_transfer"),)
    classes = ('btn-danger',)
    help_text = _("This action cannot be undone.")

    def allowed(self, request, workload):
        return (workload.status == "transfer-in-progress")

    def single(self, table, request, workload_id):
        try:
            for trans in workloadmgr.transfer_list(request):
                if trans.workload_id == workload_id:
                    workloadmgr.transfer_delete(request, trans.id)
                    msg = _('Successfully aborted workload transfer "%s"'
                            ) % trans.id
                    messages.success(request, msg)
                    break
        except Exception:
            exceptions.handle(request, _("Unable to abort workload transfer."))

    def get_success_url(self, request):
        return reverse('horizon:project:workloads:index')


class CompleteTransfer(tables.Action):
    name = "complete_transfer"
    verbose_name = _("Complete Transfer")
    policy_rules = (("workload", "workload:delete_transfer"),)
    classes = ('btn-danger',)
    help_text = _("This action cannot be undone.")

    def allowed(self, request, workload):
        return (workload.status == "transfer-in-progress")

    def single(self, table, request, workload_id):
        try:
            for trans in workloadmgr.transfer_list(request):
                if trans.workload_id == workload_id:
                    workloadmgr.transfer_complete(request, trans.id)
                    msg = _('Successfully completed workload transfer "%s"'
                            ) % trans.id
                    messages.success(request, msg)
                    break
        except Exception as ex:
            messages.error(request, str(ex))

    def get_success_url(self, request):
        return reverse('horizon:project:workloads:index')


class WorkloadsTable(tables.DataTable):
    STATUS_CHOICES = (
        ("available", True),
        ("error", True)
    )

    created_at = tables.Column("created_at",
                               verbose_name=_("Created at"),
                               empty_value="...",
                               classes=('t_col165', 'test'))
    name = tables.Column("name", verbose_name=_("Name"),
                         link='horizon:project:workloads:detail',
                         classes=('test', 'workloadname'))
    snapshots_info = tables.Column("snapshots_info",
                                   verbose_name=_("Snapshots"),
                                   empty_value="-",
                                   classes=('t_col200', 'snapshots_info'))
    description = tables.Column("description", verbose_name=_("Description"))
    # id = tables.Column("id", verbose_name=_("ID"))
    status = tables.Column("status",
                           verbose_name=_("Status"),
                           classes=('t_col100', 'test', 'col_status'),
                           status=True,
                           status_choices=STATUS_CHOICES)
    trust = tables.Column("trust", verbose_name=_(
        "Scheduler Trust"), classes=('t_col100', 'trust'))

    encryption = tables.Column("encryption",
                                verbose_name=_('Encryption'),
                                classes=('encryption'),
                                )

    user_id = tables.Column("user_id",
                            verbose_name=_("User Id"),
                            hidden=True,
                            classes=('user',))

    project_id = tables.Column("project_id",
                               verbose_name=_("Project Id"),
                               hidden=True,
                               classes=('project',))

    policy_id = tables.Column("policy_id",
                               verbose_name=_("Policy Id"),
                               hidden=True,
                               classes=('policy',))

    class Meta:
        name = "workloads"
        verbose_name = _("Workloads")
        status_columns = ["status", "status"]
        row_class = UpdateRow
        # table_actions = (CreateWorkload, AcceptTransfer, DeleteWorkload)
        table_actions = (CreateWorkload, DeleteWorkload)
        # row_actions = (CreateSnapshot, EditWorkload, CreateTransfer,
        #               AbortTransfer, CompleteTransfer,
        row_actions = (CreateSnapshot, EditWorkload,
                       WorkloadUnlock, WorkloadReset, DeleteWorkload, )