def run_task(): logger.info("Running main cycle %s" % task.task_id.value) update = mesos_pb2.TaskStatus() update.task_id.value = task.task_id.value update.state = mesos_pb2.TASK_RUNNING driver.sendStatusUpdate(update) #text = task.data #res = results.TestResult("Hello from task: " + str(task.task_id.value), text=text) #message = repr(res) #driver.sendFrameworkMessage(message) message = messages.create_message(messages.EMT_READYTOWORK) driver.sendFrameworkMessage(message) while(not self._is_shutting_down): self.rlock.acquire() # report about task if it is finished self.check_computations(driver) self.rlock.release() time.sleep(5) logger.info("Sending status update...") update = mesos_pb2.TaskStatus() update.task_id.value = task.task_id.value update.state = mesos_pb2.TASK_FINISHED driver.sendStatusUpdate(update) logger.info("Sent status update") return
def check_computations(self, driver): if self.runnig_task is None: return False if not self.runnig_task.is_finished(): return False logger.info("Task %s is finished. Trying to report to the master" % self.runnig_task.task['id']) message = messages.create_message(messages.EMT_TASKFINISHED, self.runnig_task.task_repr()) driver.sendFrameworkMessage(message) self.runnig_task = None return True
# message was not intended for marvin pass # checks all records in card_properties_dictionary and send query if # has_required_data returns True value for card_id in card_properties_dictionary: if card_properties_dictionary[card_id].has_required_data(): new_screens = queries.check_for_new_screens( MARVEL_API_URL, card_properties_dictionary[card_id]) if new_screens is not None: for i in new_screens: new_screen = i['node'] print("new screen: " + new_screen['displayName']) messages.create_message( new_screen['displayName'], new_screen['uploadUrl'], card_id, helper.BOT_ID) # 'uploadUrl' je pohekan # in case of required data check if changes were made on marvel project modified_screen = queries.check_if_screen_modified( MARVEL_API_URL, card_properties_dictionary[card_id]) if modified_screen is not None: print("Changes made on screen " + modified_screen.displayName) messages.edit_message(modified_screen.displayName, modified_screen.screen_url, card_id, helper.BOT_ID) # CHECK FOR COMMENTS UPDATE new_comments, screen_name, screen_url = queries.check_for_new_comments( MARVEL_API_URL, card_properties_dictionary[card_id])
def askExecutor_PoisonPill(self, driver): message = messages.create_message(messages.SMT_POISONPILL) logger.info("Sending Poison Pill to eID: %s sID: %s" % (self.eId, self.sId)) d = driver.sendFrameworkMessage(self.eId, self.sId, message) pass
def askExecutor_RunTask(self, driver, task): message = messages.create_message(messages.SMT_RUNTASK, task.json_repr()) logger.info("Running Task %s on eID: %s sID: %s" % (task.id, self.eId, self.sId)) d = driver.sendFrameworkMessage(self.eId, self.sId, message) pass
def askExecutor_Terminate(self, driver): message = messages.create_message(messages.SMT_TERMINATEEXECUTOR) logger.info("Tryna to kill eID: %s sID: %s" % (self.eId, self.sId)) d = driver.sendFrameworkMessage(self.eId, self.sId, message) pass
def meeting_proc(event, settings, dynamodb): """ミーティング処理 :param event: イベントデータ :param settings: Settingsクラスオブジェクト :param dynamodb: DynamoDBクラスオブジェクト :return: なし """ # tokenのチェック if not is_verify_token(event): return # 新規投稿であるかをチェック(削除や編集は対象外) if not is_new_message(event): return # slackのイベント slack_event = event["event"] # ユーザー userid = slack_event["user"] # テキスト text = slack_event["text"] # チャンネル channel = slack_event["channel"] # ユーザーが存在するかをチェック isuser = settings.is_user(userid) if isuser == False: return # ステータス取得 status = dynamodb.get_status(userid) # Question number question_no = status['question_no'] # ミーティング時間外 if question_no == 0: return # メッセージを保存 dynamodb.save_message(userid, question_no, text) # 最後の質問への回答の場合 question_len = len(settings.get_question_list()) if question_no == question_len: # 完了メッセージを送信 slack.post_message(channel, settings.get_end_message()) # 収集されたメッセージを全て取得 d = dynamodb.get_messages(userid) # メッセージを作成 attachments = messages.create_message(d, settings) # get_users_infoでユーザー名やアイコンを取得 profile = slack.get_users_info(userid).get('user').get('profile') # 投稿先チャンネル broadcast_channel = settings.get_broadcast_channel() # メッセージ message = messages.get_broadcast_message(settings.get_project_title(), profile['real_name']) # 該当チャンネルに、投稿内容をまとめて送信 slack.post_broadcast_message(broadcast_channel, message, profile['display_name'], profile['image_48'], attachments) # Question numberを0にする(ミーティング終了) dynamodb.save_status(userid, 0) # メッセージを全て削除する for num in range(1, question_len + 1): dynamodb.delete_message(userid, num) # 回答中の場合 else: # Question numberを1つ進める dynamodb.save_status(userid, question_no + 1) # Slackにメッセージを投稿する slack.post_message(channel, settings.get_question_text(int(question_no)))