def crawl_result(result, force=False, commit=True):
    """crawl_results."""
    if not result.crawlable:
        return result
    now = datetime.datetime.now()

    if (not force) and (now - result.updated_at).total_seconds() < 4:
        return result

    # if log file is not updated, not necessary to get log contents
    is_updated = _check_log_updated(result)
    crawled_result = crawl_result_path(result.path_name, is_updated)

    if is_updated:
        current_log_idx = len(result.logs)
        if len(crawled_result['logs']) < current_log_idx:
            current_log_idx = 0
            result.logs = []
            result.args = None
        for log in crawled_result['logs'][current_log_idx:]:
            result.logs.append(Log(log))

    if result.args is None:
        result.args = Argument(json.dumps(crawled_result['args']))

    if result.name is None:
        _update_to_default_name(result)

    # commands list includes new commands and already registered commands.
    # registered commands can be get response, so need to update
    current_cmd_idx = len(result.commands)
    if len(crawled_result['commands']) < current_cmd_idx:
        current_cmd_idx = 0
        result.commands = []
        result.snapshots = []
    for cmd in crawled_result['commands'][current_cmd_idx:]:
        result.commands.append(Command(**cmd))
    for i, cmd in enumerate(crawled_result['commands'][:current_cmd_idx]):
        result.commands[i].update(cmd.get('response', None))

    # snapshots file list are sorted but not natural order, for example,
    # 'iter_900' set latter than 'iter_1000', so need to check the file
    # is registered or not.
    registered_snapshot_keys = [ss.iteration for ss in result.snapshots]
    for i, snapshot in enumerate(crawled_result['snapshots']):
        number_str = snapshot.split('snapshot_iter_')[1]
        if not is_numberable(number_str):
            continue
        number = int(number_str)
        if number in registered_snapshot_keys:
            continue
        result.snapshots.append(Snapshot(snapshot, number))

    result.updated_at = datetime.datetime.now()
    if commit:
        db.session.commit()

    return result
crawl_results.