class OrderTaker(Staff): """ Job Scheduler Worker """ def __init__(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key): Staff.__init__(self, aws_access_key_id, aws_secret_access_key) self.queue = SQSUtils(queue_name, queue_region, aws_access_key_id, aws_secret_access_key) def get_order(self): self.logger.info("Get order from SQS") (message, order) = self.queue.get_message() if message: self.queue.delete_message(message) return order return None def _check_order(self, message): if message: body = json.loads(message) order = Order(body) return order return None def take_order(self): order = self.get_order() order_obj = self._check_order(order) return order_obj
def main(i): order_taker = OrderTaker(order_queue_name, queue_region, aws_access_key_id, aws_secret_access_key) cook = Cook(aws_access_key_id, aws_secret_access_key) order = order_taker.take_order() omelet = cook.do_tasks(order) if omelet: sqs = SQSUtils(result_queue_name, queue_region, aws_access_key_id, aws_secret_access_key, logger=None) result_set = dict() result_set['result'] = omelet result_set['ticketId'] = order.get_ticket_id() sqs.write_message(json.dumps(result_set))
def main(i): order_taker = OrderTaker(order_queue_name, queue_region, aws_access_key_id, aws_secret_access_key) cook = Cook(aws_access_key_id, aws_secret_access_key) results = list() tasks = order_taker.deliver_order() if tasks: for task in tasks: results = cook.do_task(task) #return a list if results: #print results sqs = SQSUtils(result_queue_name, queue_region, aws_access_key_id, aws_secret_access_key, logger=None) result_set = dict() result_set['result'] = results result_set['ticketId'] = tasks[0]['ticketId'] sqs.write_message(json.dumps(result_set))
def __init__(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key): Staff.__init__(self, aws_access_key_id, aws_secret_access_key) self.queue = SQSUtils(queue_name, queue_region, aws_access_key_id, aws_secret_access_key)
class OrderServer(Staff): def __init__(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key): Staff.__init__(self, aws_access_key_id, aws_secret_access_key) self.queue = SQSUtils(queue_name, queue_region, aws_access_key_id, aws_secret_access_key) def get_order(self): self.logger.info("Get order from SQS") (message, order) = self.queue.get_message() if message: self.queue.delete_message(message) return order return None def get_dish(self): self.logger.info("Get order from SQS") (message, order) = self.queue.get_message() if message: self.queue.delete_message(message) return order return None def _check_order(self, message): if message: body = json.loads(message) order = Order(body) return order return None def deliver_dish(self): order = self.get_order() order_obj = self._check_order(order) if order_obj: #FIXME: jira table format :-) #self.sent_to_jira(order_obj.get_ticket_id(), "*** Omelet provisioning result: \n" + json.dumps(order_obj.get_result())) #self.sent_to_jira(order_obj.get_ticket_id(), jira_formatter.to_table(order_obj.get_result())) self.sent_to_jira(order_obj.get_ticket_id(), jira_formatter.to_panel(order_obj.get_result())) def sent_to_jira(self, ticketId, result): """ send the result to JIRA """ options = { 'server': jira_server } jira = JIRA(options, basic_auth=(jira_username, jira_password)) # Get all projects viewable by anonymous users. projects = jira.projects() # Sort available project keys, then return the second, third, and fourth keys. keys = sorted([project.key for project in projects])[2:5] # Get an issue. issue = jira.issue(ticketId) # Add a comment to the issue. jira.add_comment(issue, result) # Move the ticket to Provision Completed. #print issue.fields.status try: jira.transition_issue(issue, transitionId=provision_completed_transition_id, comment='Provision finished') except: print "Transition Error" self.logger.error("Transition Error")
if os.environ.has_key('AWS_SECRET_KEY') : aws_secret_access_key = os.environ['AWS_SECRET_KEY'] else: #for compatible reason aws_secret_access_key = parser.get('AWS_credentials', 'aws_secret_access_key') order_queue_name = parser.get('SQS_settings', 'order_queue_name') result_queue_name = parser.get('SQS_settings', 'result_queue_name') queue_region = parser.get('SQS_settings', 'queue_region') max_cook_count = parser.get('General_config', 'max_cook_count') # # fork workers # sqs = SQSUtils(order_queue_name, queue_region, aws_access_key_id, aws_secret_access_key, logger=None) #print "should have " + str(sqs.get_count()) if sqs.get_count() > 0: thread_list = list() while sqs.get_count() > 0: if threading.active_count() < int(max_cook_count) + 1: thread = threading.Thread(target=main, args=(len(thread_list), )) thread_list.append(thread) thread.start() else: #FIXME: two threads get same task time.sleep(random.randrange(1, int(max_cook_count) + 1) * 10) sqs = SQSUtils(order_queue_name, queue_region, aws_access_key_id, aws_secret_access_key, logger=None) for thread in thread_list: thread.join() else:
def __init__(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key): Staff.__init__(self, aws_access_key_id, aws_secret_access_key) #Staff.deliver_queue_init(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key) self.queue = SQSUtils(queue_name, queue_region, aws_access_key_id, aws_secret_access_key) self.priority = self._priority_init()
class OrderTaker(Staff): """ Job Scheduler Worker """ def __init__(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key): Staff.__init__(self, aws_access_key_id, aws_secret_access_key) #Staff.deliver_queue_init(self, queue_name, queue_region, aws_access_key_id, aws_secret_access_key) self.queue = SQSUtils(queue_name, queue_region, aws_access_key_id, aws_secret_access_key) self.priority = self._priority_init() def get_order(self): self.logger.info("Get order from SQS") (message, order) = self.queue.get_message() if message: self.queue.delete_message(message) return order return None def _priority_init(self): priority_dict = dict() parser = ConfigParser() parser.optionxform = str # preserve case from config parser.read('sched_config.ini') section_name = "Task_priority" options = parser.options(section_name) for option in options: try: priority_dict[option] = parser.get(section_name, option) #priority_dict[parser.get(section_name, option)] = option except: self.logger.error("Exception when do priority init - %s" % option) print "Exception on %s" % option return priority_dict def _check_order(self, message): if message: body = json.loads(message) order = Order(body) return order return None def _get_priority(self, task_type): if task_type in self.priority.keys(): priority = self.priority[task_type] return int(priority) else: self.logger.error("Unspecified priority of task type: %s. Please check the priority in config file" % task_type) raise def deliver_order(self): order = self.get_order() order_obj = self._check_order(order) if order_obj: #ticket_id = order_set['ticketId'] # # sorted priority for correcting sequence number # tasks = order_obj.get_tasks() for idx, task in enumerate(tasks): task['priority'] = self._get_priority(task['taskType']) task['taskId'] = str(idx) task['ticketId'] = order_obj.get_ticket_id() tasks = sorted(tasks, key=operator.itemgetter('priority')) print tasks return tasks return None """