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")
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')
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)
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
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