Пример #1
0
        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
Пример #2
0
    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
Пример #3
0
                # 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])
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
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)))