def METHOD_NAME(
    skale,
    skale_ima,
    node_config: NodeConfig,
    schain,
    dutils=None,
    once=False
):
    stream_version = get_skale_node_version()
    tasks_number = 2
    with ThreadPoolExecutor(max_workers=tasks_number, thread_name_prefix='T') as executor:
        futures: List[Optional[Future]] = [None for i in range(tasks_number)]
        while True:
            schain_record = SChainRecord.get_by_name(schain['name'])
            try:
                create_and_execute_tasks(
                    skale,
                    schain,
                    node_config,
                    skale_ima,
                    stream_version,
                    schain_record,
                    executor,
                    futures,
                    dutils
                )
                if once:
                    return True
                post_monitor_sleep()
            except Exception:
                logger.exception('Monitor iteration failed')
                if once:
                    return False
                post_monitor_sleep()