Ejemplo n.º 1
0
def change_profile(request):

    user = request.user
    profile = user.profile
    email, mobile = retrieve_params(request.data, 'email', 'mobile')

    if UserProxy.objects.filter(email=email).exclude(pk=user.pk).exists():
        return fail(_("This email has already been used."))

    if UserProfile.objects.filter(mobile=mobile).exclude(
            pk=profile.pk).exists():
        return fail(_("This mobile has already been used."))

    user.email = email
    profile.mobile = mobile

    user.save()
    profile.save()

    return Response({
        "success":
        True,
        "msg":
        _("Password has been changed! Please login in again.")
    })
Ejemplo n.º 2
0
def backup_volume(request):

    volume_id, name, is_full = retrieve_params(request.data, 'volume_id',
                                               'name', 'is_full')

    udc = UserDataCenter.objects.get(pk=request.session["UDC_ID"])
    is_full = True if is_full == 'true' else False

    volume = Volume.objects.get(pk=volume_id)

    if BackupItem.is_any_unstable(resource=volume):
        return fail(
            _("Volume %(name)s has one backup task now.") %
            {'name': volume.name})

    if BackupItem.has_error_node_on_default_chain(resource=volume):
        return fail(
            _("Volume %(name)s has one error backup node on "
              "default backup chain. Please delete it first") %
            {'name': volume.name})

    item = BackupItem.create(volume, name, request.user, udc, is_full=is_full)

    Operation.log(volume, obj_name=volume.name, action="backup")
    tasks.execute_backup.delay(item.id)

    return success(_("Backup is in process."))
Ejemplo n.º 3
0
def backup_volume(request):

    volume_id, name, is_full = retrieve_params(
        request.data, 'volume_id', 'name', 'is_full')

    udc = UserDataCenter.objects.get(pk=request.session["UDC_ID"])
    is_full = True if is_full == 'true' else False

    volume = Volume.objects.get(pk=volume_id)

    if BackupItem.is_any_unstable(resource=volume):
        return fail(_("Volume %(name)s has one backup task now.")
                    % {'name': volume.name})

    if BackupItem.has_error_node_on_default_chain(resource=volume):
        return fail(_("Volume %(name)s has one error backup node on "
                    "default backup chain. Please delete it first")
                    % {'name': volume.name})

    item = BackupItem.create(volume, name, request.user, udc, is_full=is_full)

    Operation.log(volume, obj_name=volume.name, action="backup")
    tasks.execute_backup.delay(item.id)

    return success(_("Backup is in process."))
Ejemplo n.º 4
0
def announce(request):
    level, title, content = retrieve_params(request.data, 'level', 'title',
                                            'content')
    Notification.objects.create(title=title, content=content,
                                level=level, is_announcement=True)

    return Response({"success": True,
                     "msg": _('Announcement is sent successfully!')})
Ejemplo n.º 5
0
def announce(request):
    level, title, content = retrieve_params(request.data, 'level', 'title',
                                            'content')
    Notification.objects.create(title=title, content=content,
                                level=level, is_announcement=True)

    return Response({"success": True,
                     "msg": _('Announcement is sent successfully!')})
Ejemplo n.º 6
0
def broadcast(request):
    receiver_ids = request.data.getlist('receiver_ids[]')
    level, title, content = retrieve_params(request.data,
                                            'level', 'title', 'content')

    send_notifications.delay(title, content, level, receiver_ids)

    return Response({"success": True,
                     "msg": _('Notification is sent successfully!')})
Ejemplo n.º 7
0
def define_workflow(request):

    workflow_id, name, resource_type = retrieve_params(request.data, 'id',
                                                       'name', 'resource_type')

    step_ids, step_names, step_approvers = retrieve_list_params(
        request.data, 'step_ids[]', 'step_names[]', 'step_approvers[]')

    if workflow_id:
        workflow = Workflow.objects.get(pk=workflow_id)
    else:
        workflow = Workflow(is_default=False)

    workflow.name = name
    workflow.resource_type = resource_type
    workflow.save()

    original_steps, new_steps = workflow.steps.all(), []
    step_orders = range(len(step_ids))

    last_step = None
    for index in step_orders:

        pk, name, approver_id = step_ids[index], step_names[
            index], step_approvers[index]

        if pk:
            step = Step.objects.get(pk=pk)
        else:
            step = Step()
            step.workflow = workflow

        step.name = name
        step.order = index
        step.approver = UserProxy.normal_users.get(pk=approver_id)
        step.save()

        if last_step:
            last_step.next = step
            last_step.save()

        last_step = step

        new_steps.append(step)

    for step in original_steps:

        if step not in new_steps:
            step.delete()

    workflow = Workflow.objects.get(pk=workflow.pk)

    return Response({
        "success": True,
        "msg": _('Workflow is saved.'),
        "data": WorkflowSerializer(workflow).data
    })
Ejemplo n.º 8
0
def broadcast(request):
    receiver_ids = request.data.getlist('receiver_ids[]')
    level, title, content = retrieve_params(request.data,
                                            'level', 'title', 'content')

    send_notifications.delay(title, content, level, receiver_ids)

    return Response({"success": True,
                     "msg": _('Notification is sent successfully!')})
Ejemplo n.º 9
0
def data_center_broadcast(request):
    level, title, content = retrieve_params(
        request.data, 'level', 'title', 'content')

    dc_ids = request.data.getlist('data_centers[]')

    send_notifications_by_data_center.delay(title, content, level, dc_ids)

    return Response({"success": True,
                     "msg": _('Notification is sent successfully!')})
Ejemplo n.º 10
0
def data_center_broadcast(request):
    level, title, content = retrieve_params(
        request.data, 'level', 'title', 'content')

    dc_ids = request.data.getlist('data_centers[]')

    send_notifications_by_data_center.delay(title, content, level, dc_ids)

    return Response({"success": True,
                     "msg": _('Notification is sent successfully!')})
Ejemplo n.º 11
0
def define_workflow(request):

    workflow_id, name, resource_type = retrieve_params(
        request.data, 'id', 'name', 'resource_type')

    step_ids, step_names, step_approvers = retrieve_list_params(
        request.data, 'step_ids[]', 'step_names[]', 'step_approvers[]')

    if workflow_id:
        workflow = Workflow.objects.get(pk=workflow_id)
    else:
        workflow = Workflow(is_default=False)

    workflow.name = name
    workflow.resource_type = resource_type
    workflow.save()

    original_steps, new_steps = workflow.steps.all(), []
    step_orders = range(len(step_ids))

    last_step = None
    for index in step_orders:

        pk, name, approver_id = step_ids[index], step_names[index], step_approvers[index]

        if pk:
            step = Step.objects.get(pk=pk)
        else:
            step = Step()
            step.workflow = workflow

        step.name = name
        step.order = index
        step.approver = UserProxy.normal_users.get(pk=approver_id)
        step.save()

        if last_step:
            last_step.next = step
            last_step.save()

        last_step = step

        new_steps.append(step)

    for step in original_steps:

        if step not in new_steps:
            step.delete()

    workflow = Workflow.objects.get(pk=workflow.pk)

    return Response({"success": True,
                     "msg": _('Workflow is saved.'),
                     "data": WorkflowSerializer(workflow).data})
Ejemplo n.º 12
0
def backup_instance(request):

    instance_id, name, is_full = retrieve_params(request.data, 'instance_id',
                                                 'name', 'is_full')

    udc = UserDataCenter.objects.get(pk=request.session["UDC_ID"])
    volume_ids = request.data.getlist('volume_ids[]')
    is_full = True if is_full == 'true' else False

    instance = Instance.objects.get(pk=instance_id)
    volumes = Volume.objects.filter(pk__in=volume_ids)

    if BackupItem.is_any_unstable(resource=instance):
        return fail(
            _("Instance %(name)s has one backup task now.") %
            {'name': instance.name})

    if BackupItem.has_error_node_on_default_chain(resource=instance):
        return fail(
            _("Instance %(name)s has one error backup node on "
              "default backup chain. Please delete it first") %
            {'name': instance.name})

    for volume in volumes:
        if BackupItem.is_any_unstable(resource=volume):
            return fail(
                _("Volume %(name)s has one backup task now.") %
                {'name': volume.name})

        if BackupItem.has_error_node_on_default_chain(resource=volume):
            return fail(
                _("Volume %(name)s has one error backup node on "
                  "default backup chain. Please delet it first") %
                {'name': volume.name})

    items = [
        BackupItem.create(instance, name, request.user, udc, is_full=is_full)
    ]

    Operation.log(instance, obj_name=instance.name, action="backup")

    for volume in volumes:
        items.append(
            BackupItem.create(volume, name, request.user, udc,
                              is_full=is_full))
        Operation.log(volume, obj_name=volume.name, action="backup")

    for item in items:
        tasks.execute_backup.delay(item.id)

    return success(_("Backup is in process."))
Ejemplo n.º 13
0
def network_update(request):
    network_id, name = retrieve_params(request.data, 'id', 'name')

    try:
        network = Network.objects.get(pk=network_id, user=request.user)
    except Network.DoesNotExist:
        return Response({"OPERATION_STATUS": 0,
                         "MSG": _('The selected network not exist')})
    else:
        network.name = name
        network.save()
        Operation.log(obj=network, obj_name=network.name, action='update')
        return Response({"OPERATION_STATUS": 1,
                         "MSG": _('Update network success')})
Ejemplo n.º 14
0
def set_default_workflow(request):

    workflow_id, resource_type = retrieve_params(request.data, 'id', 'resource_type')

    try:
        workflow = Workflow.objects.get(pk=workflow_id)
    except Workflow.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    else:
        Workflow.objects.filter(resource_type=resource_type).update(is_default=False)
        workflow.is_default = True
        workflow.save()

    msg = _("%(name)s is the default workflow for %(resource)s now.") \
        % {'name': workflow.name, 'resource': workflow.resource_name}

    return Response({"success": True, "msg": msg}, status=status.HTTP_200_OK)
Ejemplo n.º 15
0
def backup_instance(request):

    instance_id, name, is_full = retrieve_params(
        request.data, 'instance_id', 'name', 'is_full')

    udc = UserDataCenter.objects.get(pk=request.session["UDC_ID"])
    volume_ids = request.data.getlist('volume_ids[]')
    is_full = True if is_full == 'true' else False

    instance = Instance.objects.get(pk=instance_id)
    volumes = Volume.objects.filter(pk__in=volume_ids)

    if BackupItem.is_any_unstable(resource=instance):
        return fail(_("Instance %(name)s has one backup task now.")
                    % {'name': instance.name})

    if BackupItem.has_error_node_on_default_chain(resource=instance):
        return fail(_("Instance %(name)s has one error backup node on "
                      "default backup chain. Please delete it first")
                    % {'name': instance.name})

    for volume in volumes:
        if BackupItem.is_any_unstable(resource=volume):
            return fail(_("Volume %(name)s has one backup task now.")
                        % {'name': volume.name})

        if BackupItem.has_error_node_on_default_chain(resource=volume):
            return fail(_("Volume %(name)s has one error backup node on "
                        "default backup chain. Please delet it first")
                        % {'name': volume.name})

    items = [BackupItem.create(instance, name, request.user,
                               udc, is_full=is_full)]

    Operation.log(instance, obj_name=instance.name, action="backup")

    for volume in volumes:
        items.append(BackupItem.create(volume, name, request.user, udc,
                                       is_full=is_full))
        Operation.log(volume, obj_name=volume.name, action="backup")

    for item in items:
        tasks.execute_backup.delay(item.id)

    return success(_("Backup is in process."))
Ejemplo n.º 16
0
def set_default_workflow(request):

    workflow_id, resource_type = retrieve_params(request.data, 'id',
                                                 'resource_type')

    try:
        workflow = Workflow.objects.get(pk=workflow_id)
    except Workflow.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    else:
        Workflow.objects.filter(resource_type=resource_type).update(
            is_default=False)
        workflow.is_default = True
        workflow.save()

    msg = _("%(name)s is the default workflow for %(resource)s now.") \
        % {'name': workflow.name, 'resource': workflow.resource_name}

    return Response({"success": True, "msg": msg}, status=status.HTTP_200_OK)
Ejemplo n.º 17
0
def change_profile(request):

    user = request.user
    profile = user.profile
    email, mobile = retrieve_params(request.data, 'email', 'mobile')

    if UserProxy.objects.filter(email=email).exclude(pk=user.pk).exists():
        return fail(_("This email has already been used."))

    if UserProfile.objects.filter(mobile=mobile).exclude(pk=profile.pk).exists():
        return fail(_("This mobile has already been used."))

    user.email = email
    profile.mobile = mobile

    user.save()
    profile.save()

    return Response({"success": True, "msg": _(
        "Password has been changed! Please login in again.")})