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.template import defaultfilters as filters
from django.utils.translation import ugettext_lazy as _
from django.utils import http

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

from openstack_dashboard import api
from dashboards import workloadmgr

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.BatchAction):
    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 _(
            "Deleteted"
        )
        
    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:
            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"))
    workload_type = tables.Column( "workload_type_id",
                                   verbose_name=_("Workload Type"),
                                   classes=('t_col100', 'test'))
    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'))    
    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, )
        

class WorkloadTypesTable(tables.DataTable):
    name = tables.Column( "name", verbose_name=_("Name"))
    description = tables.Column( "description", verbose_name=_("Description"))
    id = tables.Column("id", verbose_name=_("ID"))
     
    class Meta:
        name = "workload_types"
        verbose_name = _("WorkloadTypes")
        row_class = UpdateRow
        table_actions = ()
        row_actions = ()