Exemple #1
0
    def test_sqs_timeout(self):
        c = SQSConnection()
        queue_name = "test_sqs_timeout_%s" % int(time.time())
        queue = c.create_queue(queue_name)
        self.addCleanup(c.delete_queue, queue, True)
        start = time.time()
        poll_seconds = 2
        response = queue.read(visibility_timeout=None, wait_time_seconds=poll_seconds)
        total_time = time.time() - start
        self.assertTrue(
            total_time > poll_seconds,
            "SQS queue did not block for at least %s seconds: %s" % (poll_seconds, total_time),
        )
        self.assertIsNone(response)

        # Now that there's an element in the queue, we should not block for 2
        # seconds.
        c.send_message(queue, "test message")
        start = time.time()
        poll_seconds = 2
        message = c.receive_message(
            queue, number_messages=1, visibility_timeout=None, attributes=None, wait_time_seconds=poll_seconds
        )[0]
        total_time = time.time() - start
        self.assertTrue(
            total_time < poll_seconds, "SQS queue blocked longer than %s seconds: %s" % (poll_seconds, total_time)
        )
        self.assertEqual(message.get_body(), "test message")

        attrs = c.get_queue_attributes(queue, "ReceiveMessageWaitTimeSeconds")
        self.assertEqual(attrs["ReceiveMessageWaitTimeSeconds"], "0")
Exemple #2
0
    def test_sqs_timeout(self):
        c = SQSConnection()
        queue_name = 'test_sqs_timeout_%s' % int(time.time())
        queue = c.create_queue(queue_name)
        self.addCleanup(c.delete_queue, queue, True)
        start = time.time()
        poll_seconds = 2
        response = queue.read(visibility_timeout=None,
                              wait_time_seconds=poll_seconds)
        total_time = time.time() - start
        self.assertTrue(
            total_time > poll_seconds,
            "SQS queue did not block for at least %s seconds: %s" %
            (poll_seconds, total_time))
        self.assertIsNone(response)

        # Now that there's an element in the queue, we should not block for 2
        # seconds.
        c.send_message(queue, 'test message')
        start = time.time()
        poll_seconds = 2
        message = c.receive_message(queue,
                                    number_messages=1,
                                    visibility_timeout=None,
                                    attributes=None,
                                    wait_time_seconds=poll_seconds)[0]
        total_time = time.time() - start
        self.assertTrue(
            total_time < poll_seconds,
            "SQS queue blocked longer than %s seconds: %s" %
            (poll_seconds, total_time))
        self.assertEqual(message.get_body(), 'test message')

        attrs = c.get_queue_attributes(queue, 'ReceiveMessageWaitTimeSeconds')
        self.assertEqual(attrs['ReceiveMessageWaitTimeSeconds'], '0')
Exemple #3
0
class SQS(object):

    def __init__(self, config="config.ini"):
        if isinstance(config, basestring):
            config = credentials.ConfigFileCredentials(config)
        elif not isinstance(config, credentials.Credentials):
            raise TypeError("Unsupported config parameter type")

        aws_access_key_id, aws_secret_access_key, aws_queue = config.get_data()

        try:
            self.conn = SQSConnection(aws_access_key_id, aws_secret_access_key)
            self.set_queue(aws_queue)
        except:
            print 'Error connection'

    def get_all_queues(self):
        return self.conn.get_all_queues()

    def get_queue_attributes(self):
        return self.conn.get_queue_attributes(self.queue, attribute='All')

    def create_queue(self, queue, timeout):
        return self.conn.create_queue(queue, timeout)

    def set_queue(self, queue):
        self.queue = self.conn.get_queue(queue)
        return True

    def get_messages(self, limit=10):
        return self.queue.get_messages(limit)

    def count(self):
        #print "Count: %s" % self.queue.count()
        return self.queue.count()

    def write(self, data):
        m = Message()
        m.set_body(json.dumps(data))
        return self.queue.write(m)

    def delete(self, id):
        #print "Eliminando %s" % id
        self.queue.delete_message(id)

    def clear(self):
        return self.queue.clear()

    def delete_queue(self):
        return self.conn.delete_queue(self.queue)
Exemple #4
0
def dashboard(request):
    """
    Graph SQS send statistics over time.
    """
    cache_key = 'vhash:django_sqs_stats'
    cached_view = cache.get(cache_key)

    if cached_view:
        return cached_view

    region_name = getattr(settings, 'SQS_REGION', 'us-east-1')
    endpoint_name = getattr(settings, 'SQS_ENDPOINT', 'queue.amazonaws.com')

    sqs_conn = SQSConnection(
        settings.AWS_ACCESS_KEY_ID,
        settings.AWS_SECRET_ACCESS_KEY,
    )

    if region_name and endpoint_name:
        region = SQSRegionInfo(sqs_conn, region_name, endpoint_name)
        sqs_conn = SQSConnection(settings.AWS_ACCESS_KEY_ID,
                                 settings.AWS_SECRET_ACCESS_KEY,
                                 region=region)

    queues = sqs_conn.get_all_queues()

    qas = {}

    for queue in queues:
        qas[queue] = sqs_conn.get_queue_attributes(queue)

    parse_attributes(qas)

    extra_context = {
        'title': 'SQS Statistics',
        'queues': queues,
        'access_key': sqs_conn.gs_access_key_id,
    }

    response = render_to_response('django_sqs/queue_stats.html',
                                  extra_context,
                                  context_instance=RequestContext(request))

    cache.set(cache_key, response, 60 * 1)  # Cache for 1 minute

    return response
Exemple #5
0
def dashboard(request):
    """
    Graph SQS send statistics over time.
    """
    cache_key = 'vhash:django_sqs_stats'
    cached_view = cache.get(cache_key)
    
    if cached_view:
        return cached_view

    region_name = getattr(settings, 'SQS_REGION', 'us-east-1')
    endpoint_name = getattr(settings, 'SQS_ENDPOINT', 'queue.amazonaws.com')
    
    sqs_conn = SQSConnection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY,)

    if region_name and endpoint_name:
        region = SQSRegionInfo(sqs_conn, region_name, endpoint_name)
        sqs_conn = SQSConnection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY, region=region)

    queues = sqs_conn.get_all_queues()

    qas = {}
    
    for queue in queues:
        qas[queue] = sqs_conn.get_queue_attributes(queue)
    
    parse_attributes(qas)

    extra_context = {
        'title': 'SQS Statistics',
        'queues': queues,
        'access_key': sqs_conn.gs_access_key_id,
    }
    
    response = render_to_response(
        'django_sqs/queue_stats.html',
        extra_context,
        context_instance=RequestContext(request))

    cache.set(cache_key, response, 60 * 1) # Cache for 1 minute
    
    return response