Exemplo n.º 1
0
    def run(self, instance_pks):
        for instance_pk in instance_pks:
            instance = _get_instance(instance_pk)
            if instance is None:
                continue

            if not OwnerInGoodStanding.is_admin_in_good_standing(
                    instance.owner_id):
                continue

            set_current_instance(instance)
            schedules = CodeBoxSchedule.objects.get_for_process()
            for schedule in schedules:
                key = PERIODIC_SCHEDULE_TEMPLATE.format(
                    instance_pk=instance.pk,
                    schedule_pk=schedule.pk,
                    scheduled_at=schedule.scheduled_next.isoformat())
                can_run = redis.set(name=key,
                                    value=1,
                                    nx=True,
                                    ex=SCHEDULE_TRACE_TIMEOUT)
                if not can_run:
                    time_in_queue = timezone.now() - schedule.scheduled_next
                    if time_in_queue > timedelta(minutes=2):
                        self.get_logger().warning(
                            "%s in %s cannot be run yet, because it was already scheduled for %s, time in queue: %s.",
                            schedule, instance,
                            schedule.scheduled_next.isoformat(), time_in_queue)
                else:
                    ScheduleTask.delay(schedule.id, instance_pk)

            if schedules:
                admin = Cached(Admin, kwargs={'id': instance.owner_id}).get()
                admin.update_last_access()
Exemplo n.º 2
0
    def initialize_request(self, request, *args, **kwargs):
        instance = getattr(request, 'instance', kwargs.get('instance', None))

        if not isinstance(instance, Instance):
            value = instance.lower()
            instance = None
            if INSTANCE_NAME_REGEX.match(value):
                try:
                    instance = Cached(Instance, kwargs=dict(name=value)).get()
                except Instance.DoesNotExist:
                    pass

        if instance is not None:
            try:
                self.validate_instance(instance)

                if getattr(request, 'instance',
                           None) is None and request.META.get(
                               'HTTP_HOST_TYPE') != 'hosting':
                    admin = Cached(Admin, kwargs={
                        'id': instance.owner_id
                    }).get()
                    admin.update_last_access()

                self.kwargs['instance'] = instance
                set_current_instance(instance)
            except SyncanoException as ex:
                request.error = ex
                instance = None

        request.instance = instance
        return super().initialize_request(request, *args, **kwargs)