alerta-contrib/integrations/sqs/alerta_sqs.py

77 lines
2.1 KiB
Python
Raw Permalink Normal View History

2015-01-26 11:48:57 +00:00
#!/usr/bin/env python
2016-12-04 21:58:24 +00:00
import os
2015-01-26 11:48:57 +00:00
import sys
import time
2016-12-04 21:58:24 +00:00
import logging
from flask.config import Config
2015-01-26 11:48:57 +00:00
import boto.sqs
from boto.sqs.message import RawMessage
from boto import exception
2016-12-04 21:58:24 +00:00
LOG = logging.getLogger('alerta.sqs')
config = Config('/')
config.from_pyfile('/etc/alertad.conf', silent=True)
config.from_envvar('ALERTA_SVR_CONF_FILE', silent=True)
DEFAULT_AWS_REGION = 'eu-west-1'
DEFAULT_AWS_SQS_QUEUE = 'alerts'
AWS_REGION = os.environ.get('AWS_REGION') or config.get('AWS_REGION', DEFAULT_AWS_REGION)
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID') or config.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY') or config.get('AWS_SECRET_ACCESS_KEY')
AWS_SQS_QUEUE = os.environ.get('AWS_SQS_QUEUE') or config.get('AWS_SQS_QUEUE', DEFAULT_AWS_SQS_QUEUE)
2015-01-26 11:48:57 +00:00
class Worker(object):
def __init__(self):
try:
connection = boto.sqs.connect_to_region(
AWS_REGION,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY
)
except boto.exception.SQSError as e:
2016-12-04 21:58:24 +00:00
LOG.error('SQS: ERROR - %s' % e)
2015-01-26 11:48:57 +00:00
sys.exit(1)
try:
self.sqs = connection.create_queue(AWS_SQS_QUEUE)
self.sqs.set_message_class(RawMessage)
except boto.exception.SQSError as e:
2016-12-04 21:58:24 +00:00
LOG.error('SQS: ERROR - %s' % e)
2015-01-26 11:48:57 +00:00
sys.exit(1)
def run(self):
while True:
2016-12-04 21:58:24 +00:00
LOG.debug('Waiting for alert on SQS queue "%s"...' % AWS_SQS_QUEUE)
2015-01-26 11:48:57 +00:00
try:
message = self.sqs.read(wait_time_seconds=20)
except boto.exception.SQSError as e:
2016-12-04 21:58:24 +00:00
LOG.error('SQS: ERROR - %s' % e)
2015-01-26 11:48:57 +00:00
time.sleep(20)
continue
if message:
self.process_message(message)
def process_message(self, message):
LOG.info('SQS: Received message - %s' % message.get_body())
self.sqs.delete_message(message)
2015-01-26 11:48:57 +00:00
def main():
try:
Worker().run()
except (SystemExit, KeyboardInterrupt):
2016-12-04 21:58:24 +00:00
sys.exit(0)
2015-01-26 11:48:57 +00:00
if __name__ == '__main__':
main()