76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
import os, sys, logging
|
|
|
|
from lib.application_configs import ApplicationConfigs
|
|
from services.form_generation_service import FormGenerationService
|
|
from services.ability_estimation_service import AbilityEstimationService
|
|
from helpers import aws_helper
|
|
|
|
from daemonize import Daemonize
|
|
from sqspy import Consumer
|
|
|
|
logging.basicConfig(stream=sys.stdout,
|
|
level=logging.INFO,
|
|
format="%(levelname)s %(asctime)s - %(message)s")
|
|
|
|
|
|
class ServiceListener(Consumer):
|
|
# add new services here
|
|
SERVICES = {
|
|
FormGenerationService.ACTION: FormGenerationService,
|
|
AbilityEstimationService.ACTION: AbilityEstimationService
|
|
}
|
|
|
|
def handle_message(self, body, attributes, messages_attributes):
|
|
# gather/manage/process data based on the particular needs
|
|
logging.info('Incoming message: %s', body)
|
|
|
|
# have to switch to either this or the AbilityEstimationService
|
|
# but depending on if we can add the tagset to the sqs message body
|
|
# we either extract that and then delegate to the appropriate service
|
|
# or get the action tag from the object through the aws helper function
|
|
key = aws_helper.get_key_from_message(body)
|
|
bucket = aws_helper.get_bucket_from_message(body)
|
|
action = aws_helper.get_object_tag(key, bucket, 'action')['Value']
|
|
|
|
logging.info(f'Process starting for {action}')
|
|
|
|
if action in self.SERVICES:
|
|
service = self.SERVICES[action](body)
|
|
service.process()
|
|
|
|
logging.info('Process complete for %s', service.file_name)
|
|
else:
|
|
logging.error(f'action of type {action} does not exist.')
|
|
|
|
def main():
|
|
logging.info('Starting IRT Service: Tokyo Drift 2: Driftocolypse (v1.8.0)...')
|
|
|
|
# ToDo: Figure out a much better way of doing this.
|
|
# LocalStack wants 'endpoint_url', while prod doesnt :(
|
|
if ApplicationConfigs.local_dev_env:
|
|
listener = ServiceListener(
|
|
None,
|
|
ApplicationConfigs.sqs_queue,
|
|
create_queue=False,
|
|
region_name=ApplicationConfigs.region_name,
|
|
aws_access_key=ApplicationConfigs.aws_access_key_id,
|
|
aws_secret_key=ApplicationConfigs.aws_secret_key,
|
|
endpoint_url=ApplicationConfigs.endpoint_url)
|
|
else:
|
|
listener = ServiceListener(
|
|
None,
|
|
ApplicationConfigs.sqs_queue,
|
|
create_queue=False,
|
|
region_name=ApplicationConfigs.region_name,
|
|
aws_access_key=ApplicationConfigs.aws_access_key_id,
|
|
aws_secret_key=ApplicationConfigs.aws_secret_key)
|
|
|
|
listener.listen()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
myname = os.path.basename(sys.argv[0])
|
|
pidfile = '/tmp/%s' % myname
|
|
daemon = Daemonize(app=myname, pid=pidfile, action=main, foreground=True)
|
|
daemon.start()
|