예제 #1
0
    def _update_allocation_source(self, events, request_data):

        for event_name, payload in events:
            EventTable.create_event(event_name, payload,
                                    request_data['allocation_source_name'])

        return AllocationSource.objects.filter(
            name=request_data['allocation_source_name']).last()
예제 #2
0
    def _update_allocation_source(self, events, request_data):

        for event_name, payload in events:
            EventTable.create_event(
                event_name,
                payload,
                request_data['allocation_source_name']
            )

        return AllocationSource.objects.filter(name=request_data['allocation_source_name']).last()
    def _change_allocation_source_compute_allowed(self, request_data):
        payload = {}
        payload['source_id'] = request_data['source_id']
        payload['compute_allowed'] = request_data['compute_allowed']

        EventTable.create_event('allocation_source_compute_allowed_changed',
                                payload, payload['source_id'])

        return AllocationSource.objects.filter(
            source_id=request_data['source_id']).last()
    def _change_renewal_strategy(self, request_data):
        payload = {}
        payload['source_id'] = request_data['source_id']
        payload['renewal_strategy'] = request_data['renewal_strategy']

        EventTable.create_event('allocation_source_renewal_strategy_changed',
                                payload, payload['source_id'])

        return AllocationSource.objects.filter(
            source_id=request_data['source_id']).last()
    def _change_renewal_strategy(self, request_data):
        payload = {}
        payload['source_id'] = request_data['source_id']
        payload['renewal_strategy'] = request_data['renewal_strategy']

        EventTable.create_event('allocation_source_renewal_strategy_changed',
                                payload, payload['source_id'])

        return AllocationSource.objects.filter(
            source_id=request_data['source_id']).last()
    def _change_allocation_source_compute_allowed(self, request_data):
        payload = {}
        payload['source_id'] = request_data['source_id']
        payload['compute_allowed'] = request_data['compute_allowed']

        EventTable.create_event(
            'allocation_source_compute_allowed_changed',
            payload,
            payload['source_id'])

        return AllocationSource.objects.filter(source_id=request_data['source_id']).last()
예제 #7
0
def enforce_allocation_overage(allocation_source_id):
    """
    Update instances for each active provider.
    """
    allocation_source = AllocationSource.objects.get(
        source_id=allocation_source_id)
    user_instances_enforced = allocation_source_overage_enforcement(
        allocation_source)
    EventTable.create_event(name="allocation_source_threshold_enforced",
                            entity_id=source.source_id,
                            payload=new_payload)
    return user_instances_enforced
예제 #8
0
    def perform_destroy(self, allocation_source, request=None):

        if not hasattr(self, 'request'):
            self.request = request

        request_user = self.request.user
        request_data = {}
        request_data['allocation_source_name'] = allocation_source.name

        # validate user
        try:
            self._validate_user(request_user)
        except Exception as exc:
            return failure_response(
                status.HTTP_400_BAD_REQUEST,
                exc.message)

        # validate patched fields and update allocation source model
        try:
            self._validate_params(request_data)
            # create payload
            payload = {}
            payload['allocation_source_name'] = str(request_data['allocation_source_name'])
            payload['delete_date'] = str(timezone.now().strftime("%Y-%m-%dT%H:%M:%S+00:00"))

            EventTable.create_event(
                'allocation_source_removed',
                payload,
                payload['allocation_source_name'])

        except Exception as exc:
            return failure_response(
                status.HTTP_400_BAD_REQUEST,
                exc.message)

        try:
            allocation_source = allocation_source

            serialized_allocation_source = AllocationSourceSerializer(
                allocation_source, context={'request': self.request})
            return Response(
                serialized_allocation_source.data,
                status=status.HTTP_200_OK)

        except Exception as exc:
            logger.exception(
                "Encountered exception while removing Allocation Source")
            return failure_response(status.HTTP_409_CONFLICT,
                                    str(exc.message))
예제 #9
0
def update_snapshot():
    if not settings.USE_ALLOCATION_SOURCE:
        return False
    allocation_source_total_compute = {}
    allocation_source_total_burn_rate = {}
    end_date = timezone.now()
    for source in AllocationSource.objects.all():
        # iterate over user + allocation_source combo
        for user_allocation_source in UserAllocationSource.objects.filter(
                allocation_source__exact=source.id):
            user = user_allocation_source.user
            # determine end date and start date using last snapshot
            start_date = user.date_joined
            # calculate compute used and burn rate for the user and allocation source combo
            compute_used, burn_rate = total_usage(
                user.username,
                start_date,
                allocation_source_name=source.name,
                end_date=end_date,
                burn_rate=True)

            allocation_source_total_compute[
                source.name] = allocation_source_total_compute.get(
                    source.name, 0) + compute_used
            allocation_source_total_burn_rate[
                source.name] = allocation_source_total_burn_rate.get(
                    source.name, 0) + burn_rate

            payload_ubr = {
                "allocation_source_id": source.source_id,
                "username": user.username,
                "burn_rate": burn_rate,
                "compute_used": compute_used
            }
            EventTable.create_event("user_allocation_snapshot_changed",
                                    payload_ubr, user.username)

        payload_as = {
            "allocation_source_id":
            source.source_id,
            "compute_used":
            allocation_source_total_compute.get(source.name, 0),
            "global_burn_rate":
            allocation_source_total_burn_rate.get(source.name, 0)
        }
        EventTable.create_event("allocation_source_snapshot", payload_as,
                                source.name)
    return True
예제 #10
0
    def perform_destroy(self, allocation_source, request=None):

        if not hasattr(self, 'request'):
            self.request = request

        request_user = self.request.user
        request_data = {}
        request_data['allocation_source_name'] = allocation_source.name

        # validate user
        try:
            self._validate_user(request_user)
        except Exception as exc:
            return failure_response(status.HTTP_400_BAD_REQUEST, exc.message)

        # validate patched fields and update allocation source model
        try:
            self._validate_params(request_data)
            # create payload
            payload = {}
            payload['allocation_source_name'] = str(
                request_data['allocation_source_name'])
            payload['delete_date'] = str(
                timezone.now().strftime("%Y-%m-%dT%H:%M:%S+00:00"))

            EventTable.create_event('allocation_source_removed', payload,
                                    payload['allocation_source_name'])

        except Exception as exc:
            return failure_response(status.HTTP_400_BAD_REQUEST, exc.message)

        try:
            allocation_source = allocation_source

            serialized_allocation_source = AllocationSourceSerializer(
                allocation_source, context={'request': self.request})
            return Response(serialized_allocation_source.data,
                            status=status.HTTP_200_OK)

        except Exception as exc:
            logger.exception(
                "Encountered exception while removing Allocation Source")
            return failure_response(status.HTTP_409_CONFLICT, str(exc.message))
예제 #11
0
 def change_allocation_source(self, allocation_source, user=None):
     """
     Call this method when you want to issue a 'change_allocation_source' event to the database.
     """
     from core.models.event_table import EventTable
     if not user:
         user = self.created_by
     #FIXME: comment out this line for AllocationSource
     if not allocation_source:
         raise Exception("Allocation source must not be null")
     payload = {
         'allocation_source_name': allocation_source.name,
         'instance_id': self.provider_alias
     }
     return EventTable.create_event("instance_allocation_source_changed",
                                    payload, user.username)
 def change_allocation_source(self, allocation_source, user=None):
     """
     Call this method when you want to issue a 'change_allocation_source' event to the database.
     """
     from core.models.event_table import EventTable
     if not user:
         user = self.created_by
     #FIXME: comment out this line for AllocationSource
     if not allocation_source:
         raise Exception("Allocation source must not be null")
     payload = {
         'allocation_source_name': allocation_source.name,
         'instance_id': self.provider_alias
     }
     return EventTable.create_event(
         "instance_allocation_source_changed", payload, user.username
     )